Tailwind CSS

Intro


    // 1 --- install
    npm install -D tailwindcss // in CreateReactApp
    npm install -D tailwindcss postcss autoprefixer // in Next.JS, Vite

    // 2 --- create tailwind.config.js file
    npx tailwindcss init    // in CreateReactApp
    npx tailwindcss init -p // in Next.JS, Vite

    // 3 --- add the paths to all of template files in tailwind.config.js file:
    module.exports = {
      content: [
        // --- in CreateReactApp:
        "./src/**/*.{js,jsx,ts,tsx}",
        // --- in Vite:
        "./index.html",
        "./src/**/*.{js,ts,jsx,tsx}",
        // --- in Next.JS:
        "./app/**/*.{js,ts,jsx,tsx,mdx}",
        "./pages/**/*.{js,ts,jsx,tsx,mdx}",
        "./components/**/*.{js,ts,jsx,tsx,mdx}",
        // or if using "src" directory:
        "./src/**/*.{js,ts,jsx,tsx,mdx}",
      ],
      theme: {
        extend: {},
      },
      plugins: [],
    }

    // 4 --- add the Tailwind directives to CSS file (./src/index.css or globals.css):
    @tailwind base;
    @tailwind components;
    @tailwind utilities;

    // 5 --- start project build process:
    npm run start // in CreateReactApp
    npm run dev   // in Next.JS

    // 6 --- use Tailwind in your project:
    export default function App() {
      return (
        <h1 className="text-3xl font-bold underline">
          Hello world!
        </h1>
      )
    }
  

Pseudo-class


    // --- HOVER - ( &:hover )
    <div class="bg-black hover:bg-white"> ... </div>

    // --- FOCUS - ( &:focus )
    <input class="border-gray-300 focus:border-blue-400" />
    // --- FOCUS-WITHIN - element or one of its descendants has focus, ( &:focus-within )
    <div class="focus-within:shadow-lg">  <input type="text" />  </div>
    // --- FOCUS-VISIBLE - element has been focused using the keyboard, ( &:focus-visible )
    <button class="focus:outline-none focus-visible:ring"> Submit </button>

    // --- ACTIVE - element is being pressed, ( &:active )
    <button class="bg-blue-500 active:bg-blue-600"> Submit </button>

    // --- EMPTY - element has no content, ( &:empty )
    <ul> {arr.map((data) => (<li class="empty:hidden"> {data.value} </li>))} </ul>

    // --- DISABLED - ( &:disabled )
    <input class="disabled:opacity-75" />
    // --- ENABLED - ( &:enabled )
    <input class="enabled:hover:border-gray-400 disabled:opacity-75" />

    // --- CHECKED - ( &:checked )
    <input type="checkbox" class="appearance-none checked:bg-blue-500" />

    // --- INDETERMINATE - indeterminate state ( &:indeterminate )
    <input type="checkbox" class="appearance-none indeterminate:bg-gray-300" />

    // --- DEFAULT - option, checkbox or radio button default value ( &:default )
    <input type="checkbox" class="default:ring-2" />

    // --- REQUIRED - required input( &:required )
    <input class="required:border-red-500" />

    // --- VALID - ( &:valid )
    <input class="valid:border-green-500" />
    // --- INVALID - ( &:invalid )
    <input class="invalid:border-red-500" />

    // --- IN-RANGE - input value is within a specified range limit ( &:in-range )
    <input min="1" max="5" class="in-range:border-green-500" />
    // --- OUT-OF-RANGE - input value is outside of a specified range limit ( &:out-of-range )
    <input min="1" max="5" class="out-of-range:border-red-500" />

    // --- PLACEHOLDER-SHOWN - input placeholder is shown ( &:placeholder-shown )
    <input class="placeholder-shown:border-gray-500" placeholder="you@example.com" />

    // --- AUTOFILL - input has been autofilled by the browser ( &:autofill )
    <input class="autofill:bg-yellow-200" />

    // --- READ-ONLY - input is read-only ( &:read-only )
    <input class="read-only:bg-gray-100" />

    // --- FIRST - first child element, ( &:first-child )
    <ul> {arr.map((data) => (<li class="py-4 first:pt-0"> {data.value} </li>))} </ul>
    // --- LAST - last child element, ( &:last-child )
    <ul> {arr.map((data) => (<li class="py-4 last:pt-0"> {data.value} </li>))} </ul>
    // --- ONLY - element is the only child ( &:only-child )
    <ul> {arr.map((data) => (<li class="py-4 only:py-0"> {data.value} </li>))} </ul>

    // --- ODD - oddly numbered child element, ( &:nth-child(odd) )
    <table> {arr.map((data) => (<tr class="bg-white odd:bg-gray-100"> {data.value} </tr>))} </table>
    // --- EVEN - evenly numbered child element, ( &:nth-child(even) )
    <table> {arr.map((data) => (<tr class="bg-white even:bg-gray-100"> {data.value} </tr>))} </table>

    // --- FIRST-OF-TYPE - first child of its type, ( &:first-of-type )
    <nav> {arr.map((data) => (<a href="#" class="ml-2 first-of-type:ml-6"> {data.value} </a>))} ... </nav>
    // --- LAST-OF-TYPE - last child of its type, ( &:last-of-type )
    <nav> {arr.map((data) => (<a href="#" class="mr-2 last-of-type:mr-6"> {data.value} </a>))} ... </nav>
    // --- ONLY-OF-TYPE - only child of its type, ( &:only-of-type )
    <nav> {arr.map((data) => (<a href="#" class="mx-2 only-of-type:mx-6"> {data.value} </a>))} ... </nav>

    // --- VISITED - link has already been visited, ( &:visited )
    <a href="https://example.com" class="text-blue-600 visited:text-purple-600"> ... </a>

    // --- TARGET - element ID matches the current URL fragment, ( &:target )
    <div id="about" class="target:shadow-lg"> ... </div>
  

Parent, children


    // --- GROUP , GROUP-{MODIFIER} - style an element based on the state of some parent element
    <a href="#" class="group block max-w-xs mx-auto rounded-lg p-6 bg-white hover:bg-sky-500 hover:ring-sky-500">
      <div class="flex items-center space-x-3">
        <svg class="h-6 w-6 stroke-sky-500 group-hover:stroke-white" fill="none" viewBox="0 0 24 24"> ... </svg>
      </div>
      <p class="text-slate-500 group-hover:text-white text-sm">Create a new project.</p>
    </a>

    // --- GROUP/{NAME} , GROUP-{MODIFIER}/{NAME} - specific parent group
    <ul role="list">
      <ul> {arr.map((data) => (
        <li class="group/item hover:bg-slate-100">
          <img src="{data.imageUrl}" alt="" />
          <div> <a href="{data.url}">{data.name}</a> <p>{data.title}</p> </div>
          <a class="group/edit invisible hover:bg-slate-200 group-hover/item:visible" href="tel:{data.phone}">
            <span class="group-hover/edit:text-gray-700"> Call </span>
          </a>
        </li>
      ))} </ul>
    </ul>

    // --- GROUP-[{ARBITRARY_VALUE}] - one-off group-* modifiers
    <div class="group is-published">
      <div class="hidden group-[.is-published]:block"> Published </div>
    </div>
    // use the & character to mark where .group should end up in the final selector
    // relative to the selector passed in
    <div class="group">
      <div class="group-[:nth-of-type(3)_&]:block"> ... </div>
    </div>

    // --- PEER , PEER-{MODIFIER} - styling based on sibling state, can be used only on previous siblings
    <form>
      <label class="block">
        <input type="email" class="peer"/>
        <p class="mt-2 invisible peer-invalid:visible text-pink-600 text-sm">
          Please provide a valid email address.
        </p>
      </label>
    </form>

    // --- PEER/{NAME} , PEER-{MODIFIER}/{NAME} - specific peer style
    <fieldset> <legend> Status </legend>
      <input id="draft" class="peer/draft" type="radio" name="status" checked />
      <label for="draft" class="peer-checked/draft:text-sky-500"> Draft </label>

      <input id="published" class="peer/published" type="radio" name="status" />
      <label for="published" class="peer-checked/published:text-sky-500"> Published </label>

      <div class="hidden peer-checked/draft:block"> Drafts are only visible to administrators. </div>
      <div class="hidden peer-checked/published:block"> Your post will be publicly visible. </div>
    </fieldset>

    // --- PEER-[{ARBITRARY_VALUE}] - one-off peer-* modifiers
    <form>
      <label for="email"> Email: </label>
      <input id="email" name="email" type="email" class="is-dirty peer" required />
      <div class="peer-[.is-dirty]:peer-required:block hidden"> This field is required. </div>
    </form>
    // use the & character to mark where .peer should end up in the final selector
    // relative to the selector passed in
    <div>
      <input type="text" class="peer" />
      <div class="hidden peer-[:nth-of-type(3)_&]:block"> ... </div>
    </div>

    // --- * - modifier - styling direct children, (& > *)
    <div>
      <h2> Categories </h2>
      <ul class="*:rounded-full *:border-sky-100 *:bg-sky-50 *:px-2 dark:text-sky-300 dark:*:border-sky-500/15">
        <li> Sales </li>
        <li> Marketing </li>
        <li> SEO </li>
      </ul>
    </div>
    // ! overriding a style with a utility directly on the child itself wont work:
    <ul class="*:bg-sky-50">
      <li class="bg-red-50"> Sales </li>
    </ul>

    // --- HAS-[{MODIFIER}] - style an element based on the state or content of its descendants, (&:has)
    <label class="has-[:checked]:bg-indigo-50 has-[:checked]:text-indigo-900 has-[:checked]:ring-indigo-200">
      <input type="radio" class="checked:border-indigo-500" />
    </label>
    // use pseudo-class, like has-[:focus], to style an element based on the state of its descendants
    // or element selectors, like has-[img] or has-[a], to style an element based on the content of its descendants

    // --- GROUP-HAS-* - style an element based on the descendants of a parent element
    <div class="group">
      <svg class="hidden group-has-[a]:block"> ... </svg>
      <p> Product Designer at <a href="...">planeteria.tech</a> </p>
    </div>

    // --- PEER-HAS-{MODIFIER} - descendants of a peer
    <fieldset> <legend>Today</legend>
      <div>
        <label class="peer">
          <input type="checkbox" name="todo[1]" checked /> Create a to do list
        </label>
        <svg class="peer-has-[:checked]:hidden"> ... </svg>
      </div> ...
    </fieldset>
  

Pseudo-elements


    // --- BEFORE , AFTER - (::before , ::after)
    <label class="block">
      <span class="after:content-['*'] after:ml-0.5 after:text-red-500 block">
        Email
      </span>
      <input type="email" name="email" class="px-3 bg-white focus:ring-1" placeholder="you@example.com" />
    </label>
    <blockquote class="text-2xl font-semibold italic text-center text-slate-900">
      When you look
      <span class="before:block before:absolute before:-inset-1 before:-skew-y-3 before:bg-pink-500 relative inline-block">
        <span class="relative text-white"> annoyed </span>
      </span>
      all the time, people think that you're busy.
    </blockquote>
    // html version:
    <blockquote class="text-2xl font-semibold italic text-center text-slate-900">
      When you look
      <span class="relative">
        <span class="block absolute -inset-1 -skew-y-3 bg-pink-500" aria-hidden="true"></span>
        <span class="relative text-white"> annoyed </span>
      </span>
      all the time, people think that you're busy.
    </blockquote>
    // include content-[''], if preflight styles are disabled

    // --- PLACEHOLDER - placeholder text of any input or textarea, (&::placeholder)
    <label class="relative block">
      <span class="sr-only"> Search </span>
      <span class="absolute inset-y-0 left-0 flex items-center pl-2">
        <svg class="h-5 w-5 fill-slate-300" viewBox="0 0 20 20"> ... </svg>
      </span>
      <input
        class="placeholder:italic placeholder:text-slate-400
               block bg-white border rounded-md py-2 shadow-sm focus:ring-1 sm:text-sm"
        placeholder="Search for anything..."
        type="text"
        name="search"
      />
    </label>

    // --- FILE - button in file inputs, (&::file-selector-button)
    <form class="flex items-center space-x-6">
      <div class="shrink-0">
        <img class="h-16 w-16 object-cover rounded-full" src="https://link.com" alt="Current profile photo" />
      </div>
      <label class="block">
        <span class="sr-only"> Choose profile photo </span>
        <input type="file" class="block w-full text-sm text-slate-500
          file:mr-4 file:py-2 file:px-4
          file:rounded-full file:border-0
          file:text-sm file:font-semibold
          file:bg-violet-50 file:text-violet-700
          hover:file:bg-violet-100
          file:border file:border-solid
        "/>
      </label>
    </form>

    // --- MARKER - counters or bullets in lists, use it on li or parent, (&::marker)
    <ul role="list" class="marker:text-sky-400 list-disc pl-5 space-y-3 text-slate-400">
      <li> 5 cups chopped Porcini mushrooms </li>
      <li> 1/2 cup of olive oil </li>
      <li> 3lb of celery </li>
    </ul>

    // --- SELECTION - active text selection, (&::selection)
    <div class="selection:bg-fuchsia-300 selection:text-fuchsia-900">
      <p>
        So I started to walk into the water.
        I <em>was</em> a marine biologist.
      </p>
    </div>
    // add it anywhere in the tree, it will be applied to all descendant elements
    <body class="selection:bg-pink-300"> ... </body>

    // --- FIRST-LINE , FIRST LETTER - (&::first-line , &::first-letter)
    <p class="first-line:uppercase first-line:tracking-widest
      first-letter:text-7xl first-letter:font-bold first-letter:text-white
      first-letter:mr-3 first-letter:float-left
    ">
      Well, let me tell you something, funny boy. Y'know that little stamp, the one
      that says "New York Public Library"? Well that may not mean anything to you.
    </p>

    // --- BACKDROP - backdrop of a native dialog element, (&::backdrop)
    <dialog class="backdrop:bg-gray-50">
      <form method="dialog"> ... </form>
    </dialog>
  

Attribute selectors


    // --- DATA-* - data attributes, only arbitrary values support by default ( &[data-…] )
    // will apply:
    <div data-size="large" class="data-[size=large]:p-8"> ... </div>
    // will not apply:
    <div data-size="medium" class="data-[size=large]:p-8"> ... </div>
    // configure shortcuts for common data attribute selectors
    // tailwind.config.js file theme.data:
    /** @type {import('tailwindcss').Config} */
    module.exports = {
      theme: {
        data: {
          checked: 'ui~="checked"',
        },
      },
    }
    // usage:
    <div data-ui="checked active" class="data-checked:underline"> ... </div>

    // --- ARIA-* - ARIA attributes
    <div aria-checked="true" class="bg-gray-600 aria-checked:bg-sky-700"> ... </div>
    // default attributes:
    // aria-checked  - &[aria-checked="true"]
    // aria-disabled - &[aria-disabled="true"]
    // aria-expanded - &[aria-expanded="true"]
    // aria-hidden   - &[aria-hidden="true"]
    // aria-pressed  - &[aria-pressed="true"]
    // aria-readonly - &[aria-readonly="true"]
    // aria-required - &[aria-required="true"]
    // aria-selected - &[aria-selected="true"]
    // generate a property on the fly, ( &[aria-…] ) :
    <th
      aria-sort="ascending"
      class="aria-[sort=ascending]:bg-[url('/img/down-arrow.svg')] aria-[sort=descending]:bg-[url('/img/up-arrow.svg')]"
    >
      Invoice #
    </th>
    // GROUP-ARIA-* , PEER-ARIA-* - target parent and sibling elements:
    <th aria-sort="ascending" class="group">
      <svg class="group-aria-[sort=ascending]:rotate-0 group-aria-[sort=descending]:rotate-180"> ... </svg>
    </th>

    // --- OPEN - "details" or "dialog" element open state
    <div class="max-w-lg mx-auto p-8">
      <details class="open:bg-white dark:open:bg-slate-900 open:ring-1 p-6 rounded-lg" open>
        <summary class="text-sm leading-6 text-slate-900 dark:text-white">
          Why do they call it Ovaltine?
        </summary>
        <div class="mt-3 text-sm leading-6 text-slate-600 dark:text-slate-400">
          <p> The mug is round. The jar is round. They should call it Roundtine. </p>
        </div>
      </details>
    </div>

    // --- RTL , LTR - building multi-directional layouts
    // for sites that needs to support both
    <div class="group flex items-center">
      <img class="shrink-0 h-12 w-12 rounded-full" src="..." alt="" />
      <div class="ltr:ml-3 rtl:mr-3">
        <p class="text-sm font-medium text-slate-300 group-hover:text-white"> ... </p>
        <p class="text-sm font-medium text-slate-500 group-hover:text-slate-300"> ... </p>
      </div>
    </div>
    // ltr modifier will not take effect unless the dir attribute is explicitly set to ltr
    <html dir="ltr"> ... </html>
  

Responsive design, media and feature queries


    // --- BREAKPOINTS - responsive utility variants to apply utility classes conditionally
    // default, by common device resolutions:
    // sm  - @media (min-width: 640px) { ... }
    // md  - @media (min-width: 768px) { ... }
    // lg  - @media (min-width: 1024px) { ... }
    // xl  - @media (min-width: 1280px) { ... }
    // 2xl - @media (min-width: 1536px) { ... }
    // usage:
    <div class="max-w-md mx-auto bg-white rounded-xl shadow-md xl:max-w-2xl">
      <div class="xl:flex">
        <div class="xl:shrink-0">
          <img class="h-48 w-full object-cover xl:h-full xl:w-48"
            src="/img/building.jpg" alt="Modern building architecture">
        </div>
      </div>
    </div>
    <img class="w-16 xl:w-32 lg:w-48" src="..." />
    // breakpoint range - stack a responsive modifier with a max-* modifier
    <div class="xl:max-xl:flex"> ... </div>
    // max-sm  - @media not all and (min-width: 640px) { ... }
    // max-md  - @media not all and (min-width: 768px) { ... }
    // max-lg  - @media not all and (min-width: 1024px) { ... }
    // max-xl  - @media not all and (min-width: 1280px) { ... }
    // max-2xl - @media not all and (min-width: 1536px) { ... }
    // single breakpoint - stack a responsive modifier with a max-* modifier for the next breakpoint
    <div class="xl:max-lg:flex"> ... </div>
    // arbitrary values - 'min' or 'max' modifiers for custom breakpoint generation
    <div class="min-[320px]:text-center max-[600px]:bg-sky-300"> ... </div>

    // --- PORTRAIT , LANDSCAPE - viewport is in a specific orientation
    // @media (orientation: portrait) , @media (orientation: landscape)
    <div>
      <div class="portrait:hidden"> ... </div>
      <div class="landscape:hidden"> Landscape design, rotate your device to view the site. </div>
    </div>

    // --- SUPPORTS-[{BROWSER_FEATURE}] - whether a feature is supported by browser, ( @supports (…) )
    // '@supports' rules, takes anything, like a property/value pair, and even expressions using "and" and "or"
    <div class="flex supports-[display:grid]:grid"> ... </div>
    // specifying just the property name
    <div class="bg-black/75 supports-[backdrop-filter]:bg-black/25 supports-[backdrop-filter]:backdrop-blur"> ... </div>
    // configure shortcuts for common @supports rules, tailwind.config.js:
    /** @type {import('tailwindcss').Config} */
    module.exports = {
      theme: {
        supports: { grid: 'display: grid' },
      },
    }
    // then use these custom supports-* modifiers:
    <div class="supports-grid:grid"> ... </div>

    // --- MOTION-REDUCE - user has requested reduced motion
    // @media (prefers-reduced-motion: reduce)
    <button type="button" class="bg-indigo-500" disabled>
      <svg class="motion-reduce:hidden animate-spin" viewBox="0 0 24 24"> ... </svg>
      Processing...
    </button>
    // --- MOTION-SAFE - adds styles when the user has NOT requested reduced motion, vs. "undoing" styles
    // @media (prefers-reduced-motion: no-preference)
    <button class="motion-safe:hover:-translate-x-0.5 motion-safe:transition">
      Save changes
    </button>

    // --- CONTRAST-MORE , CONTRAST-LESS - user has requested more contrast
    // @media (prefers-contrast: more|less)
    <label class="block">
      <span class="block text-sm font-medium text-slate-700">Social Security Number</span>
      <input class="border-slate-200 placeholder-slate-400
                    contrast-more:border-slate-400 contrast-more:placeholder-slate-500"/>
      <p class="mt-2 opacity-10 contrast-more:opacity-100 text-slate-600 text-sm">
        Required
      </p>
    </label>

    // --- FORCED-COLORS - user has enabled a forced color mode
    // forced-color-adjust: auto|none;
    <form> <legend> Choose a theme: </legend>
      <label>
        <input type="radio" class="forced-colors:appearance-auto appearance-none" />
        <p class="forced-colors:block hidden"> Cyan </p>
        <div class="forced-colors:hidden h-6 w-6 rounded-full bg-cyan-200"></div>
        <div class="forced-colors:hidden h-6 w-6 rounded-full bg-cyan-500"></div>
      </label>
    </form>

    // --- PRINT - only apply when the document is being printed, @media print
    <div>
      <article class="print:hidden">
        <h1> My Secret Pizza Recipe </h1>
        <p> This recipe is a secret, and must not be shared with anyone </p> ...
      </article>
      <div class="hidden print:block">
        Are you seriously trying to print this? It's secret!
      </div>
    </div>
  

Dark mode


    // --- DARK - dark mode modifier
    // target light mode with no modifier, and "dark" modifier for dark mode
    // ( @media (prefers-color-scheme: dark) )
    <div class="bg-white dark:bg-slate-900 rounded-lg px-6 py-8 ring-1 ring-slate-900/5 shadow-xl">
      <div>
        <span class="inline-flex items-center justify-center p-2 bg-indigo-500 rounded-md shadow-lg">
          <svg class="h-6 w-6 text-white" viewBox="0 0 24 24"> ... </svg>
        </span>
      </div>
      <h3 class="text-slate-900 dark:text-white mt-5 text-base font-medium tracking-tight">
        Writes Upside-Down
      </h3>
      <p class="text-slate-500 dark:text-slate-400 mt-2 text-sm">
        The Zero Gravity Pen can be used to write in any orientation, including upside-down.
      </p>
    </div>

    // --- toggling dark mode manually, tailwind.config.js:
    /** @type {import('tailwindcss').Config} */
    module.exports = {
      darkMode: 'class',
      // ...
    }
    // applied whenever dark class is present earlier in the HTML tree.
    // dark mode not enabled, bg-white applied:
    <html>
    <body>
      <div class="bg-white dark:bg-black"> ... </div>
    </body>
    </html>
    // dark mode enabled, bg-black applied:
    <html class="dark">
    <body>
      <div class="bg-white dark:bg-black"> ... </div>
    </body>
    </html>

    // JS example:
    if (
      localStorage.theme === 'dark' ||
      (!('theme' in localStorage) && window.matchMedia('(prefers-color-scheme: dark)').matches)
    ) {
      document.documentElement.classList.add('dark')
    } else {
      document.documentElement.classList.remove('dark')
    }
    // choose light mode
    localStorage.theme = 'light'
    // choose dark mode
    localStorage.theme = 'dark'
    // respect the OS preference
    localStorage.removeItem('theme')

    // customize the dark mode selector name
    // setting darkMode to an array with custom selector as the second item
    // tailwind.config.js:
    /** @type {import('tailwindcss').Config} */
    module.exports = {
      darkMode: ['class', '[data-mode="dark"]'],
      // ...
    }
  

Advanced concepts

STACKED MODIFIERS are applied from the inside-out, like nested function calls

    'dark:group-hover:focus:opacity-100'
    // ...are applied like this:
    dark(groupHover(focus('opacity-100')))
    // "dark" element needs to be a parent of the group element:
    /* dark:group-hover:opacity-100 */
    .dark .group:hover .dark\:group-hover\:opacity-100 {
      opacity: 1;
    }
    // reversed:
    /* group-hover:dark:opacity-100 */
    .group:hover .dark .group-hover\:dark\:opacity-100 {
      opacity: 1;
    }
    // in prose-headings (official typography plugin)
    // every single heading is underlined when you hover over the article itself:
    /* prose-headings:hover:underline */
    .prose-headings\:hover\:underline:hover :is(:where(h1, h2, h3, h4, th)) {
      text-decoration: underline;
    }
    // each heading is only underlined when you hover over that heading:
    /* hover:prose-headings:underline */
    .hover\:prose-headings\:underline :is(:where(h1, h2, h3, h4, th)):hover {
      text-decoration: underline;
    }
  
ARBITRARY VALUES, [...]

    <div class="top-[117px] lg:top-[344px]"> ... </div>
    <div class="bg-[#bada55] text-[22px] before:content-['Festivus']"> ... </div>
    // use the theme function to reference the design tokens in tailwind.config.js:
    <div class="grid grid-cols-[fit-content(theme(spacing.32))]"> ... </div>
    // using a CSS variable as an arbitrary value, just providing the actual variable name:
    <div class="bg-[--my-color]"> ... </div>

    // when an arbitrary value needs to contain a space, use an underscore:
    <div class="grid grid-cols-[1fr_500px_2fr]"> ... </div>
    // Tailwind preserves the underscore instead of converting it to a space for example in URLs:
    <div class="bg-[url('/what_a_rush.png')]"> ... </div>
    // escape the underscore with a backslash and Tailwind wont convert it to a space:
    <div class="before:content-['hello\_world']"> ... </div>
    // use String.raw() where the backslash is stripped from the rendered HTML (JSX, etc..):
    <div className={String.raw`before:content-['hello\_world']`}> ... </div>

    // add a CSS data type before the value to help Tailwind with the underlying type:
    <div class="text-[length:var(--my-var)]"> ... </div> // font-size utility
    <div class="text-[color:var(--my-var)]"> ... </div> // color utility
    // Tailwind generally handles ambiguity automatically based on the passed value:
    <div class="text-[22px]"> ... </div> // font-size utility
    <div class="text-[#bada55]"> ... </div> // color utility

    // --- PROPERTIES - properties not included out of the box
    <div class="[mask-type:luminance]"> ... </div>
    <div class="[mask-type:luminance] hover:[mask-type:alpha]"> ... </div>
    // write completely arbitrary CSS:
    <div class="[--scroll-offset:56px] lg:[--scroll-offset:44px]"> ... </div>

    // --- VARIANTS / MODIFIERS - selector, wrapped in square brackets
    <ul role="list">
      {arr.map((data) => (<li class="lg:[&:nth-child(3)]:hover:underline"> {data.value} </li>))}
    </ul>
    // can be stacked with built-in modifiers or with each other:
    {arr.map((data) => (<li class="lg:[&:nth-child(3)]:hover:underline"> {data.value} </li>))}
    // use an underscore for spaces in selector, select all p elements within the element:
    <div class="[&_p]:mt-4">
      <p> ... </p>
      <ul>
        <li> <p> ... </p> </li>
        // ...
      </ul>
    </div>
    // use at-rules like @media or @supports in arbitrary variants:
    <div class="flex [@supports(display:grid)]:grid"> ... </div>
    // combine at-rules and regular selector modifiers:
    <button type="button" class="[@media(any-hover:hover){&:hover}]:opacity-100"> ... </button>
    // - creating a plugin - addVariant API for arbitrary modifier used multiple times
    // tailwind.config.js :
    let plugin = require('tailwindcss/plugin')
    module.exports = {
      // ...
      plugins: [
        plugin(function ({ addVariant }) { // add a "third" variant, ie. "third:pb-0"
          addVariant('third', '&:nth-child(3)')
        })
      ]
    }
  
Custom CSS and @layer directive

    // main.css
    @tailwind base;
    @tailwind components;
    @tailwind utilities;

    // add custom CSS directly
    .my-custom-style {
      /* ... */
    }
    // or use the @layer directive to add styles to Tailwind 'base', 'components', and 'utilities' layers
    @layer components {
      .my-custom-style {
        /* ... */
      }
    }

    // custom styles added with @layer will automatically support Tailwind modifier syntax:
    @layer utilities {
      .content-auto {
        content-visibility: auto;
      }
    }
    ...
    <div class="lg:dark:content-auto"> ... </div>
  

'base' layer


    // set some defaults for the page by adding some classes to the html or body elements:
    <!doctype html>
    <html lang="en" class="text-gray-900 bg-gray-100 font-serif"> ... </html>

    // or add default base styles for specific HTML elements with @layer directive
    @layer base {
      h1 {
        @apply text-2xl;
      }
      h2 {
        @apply text-xl;
      }
      ...
    }
  

'components' layer


    // complicated classes for project that can be overridden with utility classes

    @layer components {
      .card {
        background-color: theme('colors.white');
        border-radius: theme('borderRadius.lg');
        padding: theme('spacing.6');
        box-shadow: theme('boxShadow.xl');
      }
      ...
    }

    // use utility classes to override them when necessary:
    <div class="card rounded-none"> ... </div>

    // 'components' layer is also a good place to put custom styles for any third-party components:
    @layer components {
      ...
      .select2-dropdown {
        @apply rounded-b-lg shadow-md;
      }
      ...
    }
    // or write those styles without using @layer directive:
    @tailwind base;
    @tailwind components;

    .select2-dropdown {
      @apply rounded-b-lg shadow-md;
    }
    .select2-search {
      @apply border border-gray-300 rounded;
    }

    @tailwind utilities;
  

'utilities' layer


    // for custom utility classes that Tailwind doesnt include out of the box
    @layer utilities {
      .content-auto {
        content-visibility: auto;
      }
    }
  
DIRECTIVES & FUNCTIONS exposed to CSS

DIRECTIVES


      /* base styles and any base styles registered by plugins */
      @tailwind base;
      /*  component classes and any component classes registered by plugins */
      @tailwind components;
      /* utility classes and any utility classes registered by plugins */
      @tailwind utilities;
      /**
        * this directive controls where Tailwind injects the
        * hover, focus, responsive, dark mode, and other variants of each class.
        * if omitted, Tailwind appends these classes to the very end of stylesheet by default.
        */
      @tailwind variants;

      /**
        * @layer directive
        * tells Tailwind to which layer (base, components, and utilities) a set of custom styles belong to
        */
      @layer base {
        h1 {
          @apply text-2xl;
        }
        h2 {
          @apply text-xl;
        }
      }
      @layer components {
        .btn-blue {
          @apply bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded;
        }
      }
      @layer utilities {
        .filter-none {
          filter: none;
        }
        .filter-grayscale {
          filter: grayscale(100%);
        }
      }

      /**
        * @apply directive
        * inline any existing utility classes into custom CSS
        * work with design tokens and use the same syntax.
        */
      .select2-dropdown {
        @apply rounded-b-lg shadow-md;
      }
      .select2-search {
        @apply border border-gray-300 rounded;
      }
      .select2-results__group {
        @apply text-lg font-bold text-gray-900;
      }
      /**
        * '!important' is removed by default to avoid specificity issues,
        * add '!important' to the end of the declaration if required.
        */
      .btn {
        @apply font-bold py-2 px-4 rounded !important;
      }
      /* with interpolation feature in Sass/SCSS */
      .btn {
        @apply font-bold py-2 px-4 rounded #{!important};
      }

      /**
        * @config directive
        * specify which config file Tailwind should use when compiling that CSS file.
        * provided path is relative to that CSS file,
        * and takes precedence over a path defined in PostCSS config or in the Tailwind CLI.
        */

      /* site.css */
      @config "./tailwind.admin.config.js";
      @tailwind base;
      @tailwind components;
      @tailwind utilities;

      /* admin.css */
      @config "./tailwind.admin.config.js";
      @tailwind base;
      @tailwind components;
      @tailwind utilities;

      /* with postcss-import, @import statements need to come before @config */
      @config "./tailwind.admin.config.js";
    

FUNCTIONS - access Tailwind-specific values


      /**
        * theme()
        * access Tailwind config values using dot notation
        */
      .content-area {
        height: calc(100vh - theme(spacing.12));
      }
      /* use dot notation to access nested color values */
      .btn-blue {
        background-color: theme(colors.blue.500);
      }
      /* use square bracket notation for value that contains a dot */
      .content-area {
        height: calc(100vh - theme(spacing[2.5]));
      }
      /* use a slash followed by the opacity value */
      .btn-blue {
        background-color: theme(colors.blue.500 / 75%);
      }

      /**
        * screen()
        * create media queries that reference breakpoints by name
        * instead of duplicating their values in CSS
        */
      @media screen(sm) {
        /* ... */
      }
      /**
        * generate a regular media query that matches specified breakpoint
        * resolve to the underlying screen value at build-time
        */
      @media (min-width: 640px) {
        /* ... */
      }
    
CLASS DETECTION

    // regular expressions is used to extract every string that could possibly be a class name.
    // use complete unbroken strings, dont construct class names dynamically.
    // inside any file like JS, JSX:

    const sizes = {
      md: 'px-4 py-2 rounded-md text-base',
      lg: 'px-5 py-3 rounded-lg text-lg',
    }

    export default function Button({ color, size, children }) {
      let sizeClasses = sizes[size]
      const colorVariants = {
        blue: 'bg-blue-600 hover:bg-blue-500 text-white',
        red: 'bg-red-500 hover:bg-red-400 text-white',
        yellow: 'bg-yellow-300 hover:bg-yellow-400 text-black',
      }

      return (
        
      )
    }
  

Config


    // --- GENERATE Tailwind config file for project, if dont exists,
    // using the Tailwind CLI utility included when you install the tailwindcss npm package
    npx tailwindcss init
    npx tailwindcss init --full // scaffold a complete config file with all Tailwind defaults
    // Tailwind detects if project is an ES Module and automatically generates correct config file
    npx tailwindcss init --esm // generate an ESM config file explicitly
    npx tailwindcss init --ts // generate a TypeScript config file
    // generate a basic postcss.config.js file alongside config file
    npx tailwindcss init -p
    // postcss.config.js
    module.exports = {
      plugins: {
        tailwindcss: {},
        autoprefixer: {},
      },
    }

    // --- CUSTOM CONFIG FILE NAME
    npx tailwindcss init custom-config-file-name.js
    // specify custom file name as a command-line argument when compiling CSS with the Tailwind CLI tool
    npx tailwindcss -c ./tailwindcss-config.js -i input.css -o output.css
    // alternatively, specify custom configuration path using the @config directive
    @config "./tailwindcss-config.js";
    @tailwind base;
    @tailwind components;
    @tailwind utilities;
  

Referencing in JavaScript


    import resolveConfig from 'tailwindcss/resolveConfig'
    import tailwindConfig from './tailwind.config.js'
    const fullConfig = resolveConfig(tailwindConfig)

    fullConfig.theme.width[4] // => '1rem'
    fullConfig.theme.screens.md // => '768px'
    fullConfig.theme.boxShadow['2xl'] // => '0 25px 50px -12px rgba(0, 0, 0, 0.25)'

    // use tool like babel-plugin-preval to avoid bigger client-side bundle size in this case
  

Configuration file


    /** @type {import('tailwindcss').Config} */
    module.exports = {

      // --- CONTENT
      // paths to all of source files that contain Tailwind class names (HTML templates, JS components)
      content: [
        // Tailwind resolves non-absolute content paths relative to the current working directory
        './public/index.html', // include HTML entry point if applicable
        './index.html', // list files located at the root independently
        './src/index.html', // be specific to avoid issues
        // use glob patterns paths match (fast-glob) :
        // * - anything except slashes and hidden files
        // ** - zero or more directories
        // use comma between values inside {} to match against a list of options
        './pages/**/*.{html,js}',
        './components/**/*.{html,js}',
        './util/**/*.{html,js}',
        './src/**/*.js', // any JS files that manipulate HTML to add classes: .classList.toggle('hidden'),...
        // always resolve paths relative to the tailwind.config.js file:
        relative: true,
        // own reusable set of components:
        './node_modules/@my-company/tailwind-components/**/*.js',
        // use require.resolve (import: const path = require('path'); ) in monorepo with workspaces:
        path.join(path.dirname(require.resolve('@my-company/tailwind-components')), '**/*.js'),
        // DO NOT:
        // - SCAN ANY CSS FILES
        // - USE EXTREMELY BROAD PATTERNS ( ./**/*.{html,js} )
        // - WATCH DIECTORIES (like src/**/*.html) THAT GET A GENERATED OUTPUT ON REBUILD (like src/css/styles.css)
      ],
      // transforming source files
      // compile content in a format that compiles to HTML (like Markdown) before scanning it for class names:
      // example imports: const remark = require('remark')
      content: {
        files: ['./src/**/*.{html,md}'],
        transform: { md: (content) => (remark().process(content)) }
      },
      // override the logic Tailwind uses to detect class names for specific file extensions
      content: {
        files: ['./src/**/*.{html,wtf}'],
        extract: { wtf: (content) => (content.match(/[^<>"'`\s]*/g)) }
      },

      // --- THEME, anything related to the visual design (colors, fonts, type scale, border sizes, breakpoints)
      // - override default theme by adding options in 'theme' section directly, unprovided keys will be inherited
      // - use 'extend' with same keys to add new classes/variants.
      // override some parts of the default theme, and extend other parts within the same configuration.
      theme: {
        // responsive breakpoints, modifiers (like 'xl:text-center')
        screens: {
          'sm': '640px', // @media (min-width: 640px) { ... }
          'md': '768px', // @media (min-width: 768px) { ... }
          'lg': '1024px', // @media (min-width: 1024px) { ... }
          'xl': '1280px', // @media (min-width: 1280px) { ... }
          '2xl': '1536px', // @media (min-width: 1536px) { ... }
          // --- custom names, class="grid grid-cols-1 tablet:grid-cols-2 laptop:grid-cols-3 desktop:grid-cols-4"
          'tablet': '640px', // @media (min-width: 640px) { ... }
          'laptop': '1024px', // @media (min-width: 1024px) { ... }
          'desktop': '1280px', // @media (min-width: 1280px) { ... }
          // --- work with max-width breakpoints instead of min-width:
          '2xl': {'max': '1535px'}, // => @media (max-width: 1535px) { ... }
          // ... list in a descending order
          'sm': {'max': '639px'}, // => @media (max-width: 639px) { ... }
          // --- specify a min-width and a max-width:
          'sm': {'min': '640px', 'max': '767px'}, // @media (min-width: 640px and max-width: 767px) { ... }
          // ... list in an ascending order
          '2xl': {'min': '1536px'}, // @media (min-width: 1536px) { ... }
          // --- multi-range breakpoints:
          'sm': '500px',
          'md': [
            // element appears at 768px,
            // revert to 'sm:' styles between 768px and 868px,
            // after which the main content area is wide enough again to apply the 'md:' styles
            {'min': '668px', 'max': '767px'},
            {'min': '868px'}
          ],
          'lg': '1100px',
          'xl': '1400px',
          // --- custom media queries:
          'tall': { 'raw': '(min-height: 800px)' },
        },
        // color palette, made available everywhere in the framework:
        // 'bg-blue', 'text-gray-dark', 'bg-tahiti-900'
        colors: {
          // completely replace the default color palette, and leave only required.
          transparent: 'transparent',
          current: 'currentColor',
          primary: '#5c6ac4',
          secondary: '#ecc94b',
          'blue': '#1fb6ff',
          // ...
          'gray': '#8492a6',
          'gray-dark': '#273444',
          'tahiti': {
            light: '#67e8f9', // bg-tahiti-light
            DEFAULT: '#06b6d4', // value with no suffix: bg-tahiti
            dark: '#0e7490', // bg-tahiti-dark
            100: '#f2e8e5',
            // ...
            900: '#43302b', // bg-tahiti-900
          },
          // --- using the default colors
          // example imports: const colors = require('tailwindcss/colors')
          black: colors.black,
          white: colors.white,
          gray: colors.gray,
          emerald: colors.emerald,
          indigo: colors.indigo,
          yellow: colors.amber, // alias
          pink: colors.fuchsia, // alias
          // --- using CSS variables:
          // - 1 - define CSS variables as channels with no color space function, main.css :
          // @layer base {
          //   :root {
          //     --color-primary: 255 115 179; // for rgb(255 115 179 / <alpha-value>)
          //     --color-secondary: 111 114 185;
          //     --color-primary: 198deg 93% 60%; // for hsl(198deg 93% 60% / <alpha-value>)
          //     --color-primary: 255, 115, 179;  // for rgba(255, 115, 179, <alpha-value>)
          // } }
          // - 2 - define colors in configuration file,
          // include the color space and special <alpha-value> placeholder:
          primary: 'rgb(var(--color-primary) / <alpha-value>)',
          secondary: 'rgb(var(--color-secondary) / <alpha-value>)',
          primary: 'hsl(var(--color-primary) / <alpha-value>)',
          secondary: 'hsl(var(--color-secondary) / <alpha-value>)',
          primary: 'rgba(var(--color-primary), <alpha-value>)',
          secondary: 'rgba(var(--color-secondary), <alpha-value>)',
        },
        // spacing and sizing scale, inherited by the core plugins:
        // padding, margin, width, minWidth, maxWidth, height, minHeight, maxHeight,
        // flex-basis, gap, inset, space, translate, scrollMargin, scrollPadding, and textIndent
        spacing: {
          px: '1px',
          0: '0',
          0.5: '0.125rem',
          1: '0.25rem', // ...
          96: '24rem',
          // ...
          sm: '8px',
          md: '12px',
          lg: '16px',
          xl: '24px',
        },
        // replace all of the default 'opacity' values
        opacity: {
          '0': '0',
          '20': '0.2',
          // ...
          '100': '1',
        }

        // referencing other values. only in top-level theme keys.
        // generate background-size utilities for every value in your spacing scale:
        backgroundSize: ({ theme }) => ({ // theme() function object
          auto: 'auto',
          cover: 'cover',
          contain: 'contain',
          ...theme('spacing') // look up other theme values using dot notation
        })

        // EXTENDING the default theme
        // examples imports: const defaultTheme = require('tailwindcss/defaultTheme')
        extend: {
          screens: {
            'lg': '992px', // replace the default screens value with the same name
            '3xl': '1600px', // new '3xl:' screen variant, alongside the existing
            '9xl': '128rem', // adds to the end of the default breakpoint list
            // --- adding to the beginning of the list:
            'xs': '475px',
            ...defaultTheme.screens,
          },
          fontFamily: {
            display: 'Oswald, ui-serif', // new 'font-display' class
            sans: [
              'Lato',
              ...defaultTheme.fontFamily.sans, // add a font family to one of default font stacks
            ]
          },
          // add a brand new color to the default palette:
          colors: {
            brown: {
              50: '#fdf8f6',
              // ...
              900: '#43302b',
            },
            blue: {
              950: '#17275c', // add additional shades to an existing color
            },
          },
          borderRadius: {
            '4xl': '2rem',
          }
        }

        // rest of the section is used to configure which values are available for each individual core plugin
        fontFamily: {
          sans: ['Graphik', 'sans-serif'],
          serif: ['Merriweather', 'serif'],
        },
        borderRadius: {
          'none': '0',
          'sm': '.125rem',
          DEFAULT: '.25rem', // DEFAULT = core plugins no suffix style version: .rounded {...}
          'lg': '.5rem',     // .rounded-lg
          'full': '9999px',  // .rounded-full
        },
      },

      // --- PLUGINS
      // register plugins used to generate extra utilities, components, base styles, or custom variants
      plugins: [
        require('@tailwindcss/forms'),
        require('@tailwindcss/aspect-ratio'),
        require('@tailwindcss/typography'),
        require('tailwindcss-children'),
      ],
      corePlugins: {
        // DISABLING an entire core plugin
        opacity: false,
      }

      // --- PRESETS, specifies a custom base configuration, instead of using Tailwind defaults
      presets: [
        require('@acmecorp/base-tailwind-config')
        // when adding multiple presets, the last configuration wins if they overlap in any way
        require('@acmecorp/tailwind-colors'),
        require('@acmecorp/tailwind-spacing'),
      ],
      // then add project-specific customizations: theme, ...
      // --- create a config/preset that completely replaces the default config
      // disable all of Tailwind defaults, no colors, font, spacing, etc. will be generated.
      presets: [], // include an empty presets

      // --- SAFELIST, generate certain class names that dont exist in content files
      // only for situations where its impossible to scan certain content for class names
      safelist: [
        'bg-red-500',
        'text-3xl',
        'lg:text-4xl',
        // using regular expressions, can only match against base utility names: '/bg-red-.+/'
        // wont match if the pattern includes a variant modifier: '/hover:bg-red-.+/'
        {
          pattern: /bg-(red|green|blue)-(100|200|300)/,
        },
        // force Tailwind to generate variants for any matched classes
        {
          pattern: /bg-(red|green|blue)-(100|200|300)/,
          variants: ['lg', 'hover', 'focus', 'lg:hover'],
        },
      ]
      // --- BLOCKLIST, prevent generating certain classes (conflict with some existing CSS, etc.)
      // only affects CSS that would be generated by Tailwind
      // only supports strings, regular expressions blocking is not available
      blocklist: [
        'container',
        'collapse',
      ],

      // --- PREFIX, useful when layering Tailwind on top of existing CSS
      // every class will be generated with the configured prefix:
      //   tw-text-left, .tw-text-center, ...
      // prefix is added after any variant modifiers:
      //   tw-text-lg xl:tw-text-xl tw-bg-red-500 hover:tw-bg-blue-500
      // dash modifier for negative values is be added before prefix: -tw-mt-8
      prefix: 'tw-',
      // no prefix will be added to custom classes, even with @layer directive
      // prefix utilities as well, just add the prefix to the class definition

      // --- IMPORTANT
      // control whether or not Tailwind utilities should be marked with !important
      // useful with existing CSS that has high specificity selectors
      important: true,
      // - selector strategy - set 'important' to an ID selector like #app instead
      important: '#app',
      // then set root element (body, div) 'id' attribute to 'app' in order for styles to work properly
      // template file that includes root selector should be included in 'content' configuration.
      // - alternatively, make any utility important by adding a ! character to the beginning:
      // !font-medium , sm:hover:!tw-font-bold

      // --- SEPARATOR
      // character used to separate modifiers (screen sizes, hover, etc.) from utility names (text-center, etc.).
      // colon is by default (:), change for templating language like Pug
      separator: '_',

      // --- CORE PLUGINS - disable classes that Tailwind would normally generate by default
      corePlugins: {
        float: false,
        objectFit: false,
        objectPosition: false,
      },
      // - safelist which core plugins should be enabled
      // provide an array that includes a list of the core plugins to use:
      corePlugins: [
        'margin',
        'padding',
        'backgroundColor',
        // ...
      ],
      // provide an empty array to disable all core plugins
      // use Tailwind as a tool for processing custom plugins:
      corePlugins: []

    }

    // --- PRESET - reusable configuration presets,
    // regular Tailwind configuration objects, with exact same shape.
    // will extend by default the default config.
    // - 1 - my-preset.js :
    module.exports = {
      theme: {
        colors: {
          blue: {
            light: '#85d7ff',
            DEFAULT: '#1fb6ff',
            dark: '#009eeb',
          },
          // ...
        },
        fontFamily: {
          sans: ['Graphik', 'sans-serif'],
        },
        extend: {
          flexGrow: {
            2: '2',
            3: '3',
          },
          // ...
        }
      },
      plugins: [
        require('@tailwindcss/typography'),
        require('@tailwindcss/aspect-ratio'),
      ],
    }
    // - 2 - tailwind.config.js
    /** @type {import('tailwindcss').Config} */
    module.exports = {
      presets: [
        require('./my-preset.js'),
      ],
      // customizations specific to this project would go here
      theme: {
        extend: {
          minHeight: {
            48: '12rem',
          }
        }
      },
    }
    // --- presets merging logic:
    // - options replaced by tailwind.config.js if present in a preset:
    //   content , darkMode , prefix , important , variantOrder , separator , safelist
    // - 'theme' object is merged shallowly,
    //   top-level keys in tailwind.config.js replacing the same top-level keys in any presets,
    //   'extend' key is collected across all configurations and applied on top of the rest.
    // - 'presets' and 'plugins' array are merged across configurations
    // - 'corePlugins', configured as an object, it is merged across configurations
    //   configured as an array, it replaces any configuration provided by configured preset(s)
  
CONFIGURATION REFERENCE, CORE PLUGINS

    // all of the keys in the theme object map to one of Tailwind core plugins,
    // except for 'screens', 'colors', and 'spacing'.
    // NOT every plugin has a corresponding key in the theme object,
    // many plugins are responsible for CSS properties that only accept a static set of values (like float for example).
    // all of these keys are also available under the theme.extend key to enable extending the default theme

    colors - color palette
    screens - responsive breakpoints
    spacing - spacing scale

    accentColor - accent-color property
    animation - animation property
    aria - aria property
    aspectRatio - aspect-ratio property
    backgroundColor - background-color property
    backgroundImage - background-image property
    backgroundOpacity - background-opacity property
    backgroundPosition - background-position property
    backgroundSize - background-size property
    blur - blur plugin
    borderColor - border-color property
    borderOpacity - borderOpacity plugin
    borderRadius - border-radius property
    borderSpacing - border-spacing property
    borderWidth - borderWidth plugin
    boxShadow - box-shadow property
    boxShadowColor - boxShadowColor plugin
    brightness - brightness plugin
    caretColor - caret-color property
    columns - columns property
    container - container plugin
    content - content property
    contrast - contrast plugin
    cursor - cursor property
    divideColor - divideColor plugin
    divideOpacity - divideOpacity plugin
    divideWidth - divideWidth plugin
    dropShadow - dropShadow plugin
    fill - fill plugin
    flex - flex property
    flexBasis - flex-basis property
    flexGrow - flex-grow property
    flexShrink - flex-shrink property
    fontFamily - font-family property
    fontSize - font-size property
    fontWeight - font-weight property
    gap - gap property
    gradientColorStops - gradientColorStops plugin
    gradientColorStopPositions - gradient-color-stop-positions property
    grayscale - grayscale plugin
    gridAutoColumns - grid-auto-columns property
    gridAutoRows - grid-auto-rows property
    gridColumn - grid-column property
    gridColumnEnd - grid-column-end property
    gridColumnStart - grid-column-start property
    gridRow - grid-row property
    gridRowEnd - grid-row-end property
    gridRowStart - grid-row-start property
    gridTemplateColumns - grid-template-columns property
    gridTemplateRows - grid-template-rows property
    height - height property
    hueRotate - hueRotate plugin
    inset - top, right, bottom, and left properties
    invert - invert plugin
    keyframes Keyframe values used in the animation plugin
    letterSpacing - letter-spacing property
    lineHeight - line-height property
    listStyleType - list-style-type property
    listStyleImage - list-style-image property
    margin - margin property
    lineClamp - line-clamp property
    maxHeight - max-height property
    maxWidth - max-width property
    minHeight - min-height property
    minWidth - min-width property
    objectPosition - object-position property
    opacity - opacity property
    order - order property
    outlineColor - outline-color property
    outlineOffset - outline-offset property
    outlineWidth - outline-width property
    padding - padding property
    placeholderColor - placeholderColor plugin
    placeholderOpacity - placeholderOpacity plugin
    ringColor - ringColor plugin
    ringOffsetColor - ringOffsetColor plugin
    ringOffsetWidth - ringOffsetWidth plugin
    ringOpacity - ringOpacity plugin
    ringWidth - ringWidth plugin
    rotate - rotate plugin
    saturate - saturate plugin
    scale - scale plugin
    scrollMargin - scroll-margin property
    scrollPadding - scroll-padding property
    sepia - sepia plugin
    skew - skew plugin
    space - space plugin
    stroke - stroke property
    strokeWidth - stroke-width property
    supports - supports property
    data - data property
    textColor - text-color property
    textDecorationColor - text-decoration-color property
    textDecorationThickness - text-decoration-thickness property
    textIndent - text-indent property
    textOpacity - textOpacity plugin
    textUnderlineOffset - text-underline-offset property
    transformOrigin - transform-origin property
    transitionDelay - transition-delay property
    transitionDuration - transition-duration property
    transitionProperty - transition-property property
    transitionTimingFunction - transition-timing-function property
    translate - translate plugin
    size - size property
    width - width property
    willChange - will-change property
    zIndex - z-index property
  

Preflight


    @tailwind base; /* preflight will be injected here */

    /* add own base styles on top of Preflight using the @layer base directive */
    @layer base {
      h1 {
        @apply text-2xl;
      }
      a {
        @apply text-blue-600 underline;
      }
    }

    @tailwind components;
    @tailwind utilities;
  

    // completely disable Preflight, tailwind.config.js :
    module.exports = {
      corePlugins: {
        preflight: false,
      }
    }
  
tailwindcss@3.4.0/src/css/preflight.css

    /*
      1. Prevent padding and border from affecting element width.
      2. Allow adding a border to an element by just adding a border-width.
    */

    *,
    ::before,
    ::after {
      box-sizing: border-box; /* 1 */
      border-width: 0; /* 2 */
      border-style: solid; /* 2 */
      border-color: theme('borderColor.DEFAULT', currentColor); /* 2 */
    }
    ::before,
    ::after {
      --tw-content: '';
    }

    /*
      1. Use a consistent sensible line-height in all browsers.
      2. Prevent adjustments of font size after orientation changes in iOS.
      3. Use a more readable tab size.
      4. Use the user's configured `sans` font-family by default.
      5. Use the user's configured `sans` font-feature-settings by default.
      6. Use the user's configured `sans` font-variation-settings by default.
      7. Disable tap highlights on iOS
    */
    html,
    :host {
      line-height: 1.5; /* 1 */
      -webkit-text-size-adjust: 100%; /* 2 */
      -moz-tab-size: 4; /* 3 */
      tab-size: 4; /* 3 */
      font-family: theme('fontFamily.sans', ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"); /* 4 */
      font-feature-settings: theme('fontFamily.sans[1].fontFeatureSettings', normal); /* 5 */
      font-variation-settings: theme('fontFamily.sans[1].fontVariationSettings', normal); /* 6 */
      -webkit-tap-highlight-color: transparent; /* 7 */
    }

    /*
      1. Remove the margin in all browsers.
      2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.
    */
    body {
      margin: 0; /* 1 */
      line-height: inherit; /* 2 */
    }

    /*
      1. Add the correct height in Firefox.
      2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)
      3. Ensure horizontal rules are visible by default.
    */
    hr {
      height: 0; /* 1 */
      color: inherit; /* 2 */
      border-top-width: 1px; /* 3 */
    }

    /* Add the correct text decoration in Chrome, Edge, and Safari. */
    abbr:where([title]) {
      text-decoration: underline dotted;
    }

    /* Remove the default font size and weight for headings. */
    h1,
    h2,
    h3,
    h4,
    h5,
    h6 {
      font-size: inherit;
      font-weight: inherit;
    }

    /* Reset links to optimize for opt-in styling instead of opt-out. */
    a {
      color: inherit;
      text-decoration: inherit;
    }

    /* Add the correct font weight in Edge and Safari. */
    b,
    strong {
      font-weight: bolder;
    }

    /*
      1. Use the user's configured `mono` font-family by default.
      2. Use the user's configured `mono` font-feature-settings by default.
      3. Use the user's configured `mono` font-variation-settings by default.
      4. Correct the odd `em` font sizing in all browsers.
    */
    code,
    kbd,
    samp,
    pre {
      font-family: theme('fontFamily.mono', ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace); /* 1 */
      font-feature-settings: theme('fontFamily.mono[1].fontFeatureSettings', normal); /* 2 */
      font-variation-settings: theme('fontFamily.mono[1].fontVariationSettings', normal); /* 3 */
      font-size: 1em; /* 4 */
    }

    /* Add the correct font size in all browsers. */
    small {
      font-size: 80%;
    }

    /* Prevent `sub` and `sup` elements from affecting the line height in all browsers. */
    sub,
    sup {
      font-size: 75%;
      line-height: 0;
      position: relative;
      vertical-align: baseline;
    }

    sub {
      bottom: -0.25em;
    }

    sup {
      top: -0.5em;
    }

    /*
      1. Remove text indentation from table contents in Chrome and Safari.
      2. Correct table border color inheritance in all Chrome and Safari.
      3. Remove gaps between table borders by default.
    */
    table {
      text-indent: 0; /* 1 */
      border-color: inherit; /* 2 */
      border-collapse: collapse; /* 3 */
    }

    /*
      1. Change the font styles in all browsers.
      2. Remove the margin in Firefox and Safari.
      3. Remove default padding in all browsers.
    */
    button,
    input,
    optgroup,
    select,
    textarea {
      font-family: inherit; /* 1 */
      font-feature-settings: inherit; /* 1 */
      font-variation-settings: inherit; /* 1 */
      font-size: 100%; /* 1 */
      font-weight: inherit; /* 1 */
      line-height: inherit; /* 1 */
      color: inherit; /* 1 */
      margin: 0; /* 2 */
      padding: 0; /* 3 */
    }

    /* Remove the inheritance of text transform in Edge and Firefox. */
    button,
    select {
      text-transform: none;
    }

    /*
      1. Correct the inability to style clickable types in iOS and Safari.
      2. Remove default button styles.
    */
    button,
    [type='button'],
    [type='reset'],
    [type='submit'] {
      -webkit-appearance: button; /* 1 */
      background-color: transparent; /* 2 */
      background-image: none; /* 2 */
    }

    /* Use the modern Firefox focus style for all focusable elements. */
    :-moz-focusring {
      outline: auto;
    }

    /* Remove the additional `:invalid` styles in Firefox. */
    :-moz-ui-invalid {
      box-shadow: none;
    }

    /* Add the correct vertical alignment in Chrome and Firefox. */
    progress {
      vertical-align: baseline;
    }

    /* Correct the cursor style of increment and decrement buttons in Safari. */
    ::-webkit-inner-spin-button,
    ::-webkit-outer-spin-button {
      height: auto;
    }

    /*
      1. Correct the odd appearance in Chrome and Safari.
      2. Correct the outline style in Safari.
    */
    [type='search'] {
      -webkit-appearance: textfield; /* 1 */
      outline-offset: -2px; /* 2 */
    }

    /* Remove the inner padding in Chrome and Safari on macOS. */
    ::-webkit-search-decoration {
      -webkit-appearance: none;
    }

    /*
      1. Correct the inability to style clickable types in iOS and Safari.
      2. Change font properties to `inherit` in Safari.
    */
    ::-webkit-file-upload-button {
      -webkit-appearance: button; /* 1 */
      font: inherit; /* 2 */
    }

    /* Add the correct display in Chrome and Safari. */
    summary {
      display: list-item;
    }

    /* Removes the default spacing and border for appropriate elements. */
    blockquote,
    dl,
    dd,
    h1,
    h2,
    h3,
    h4,
    h5,
    h6,
    hr,
    figure,
    p,
    pre {
      margin: 0;
    }

    fieldset {
      margin: 0;
      padding: 0;
    }

    legend {
      padding: 0;
    }

    /*
      Lists are unstyled/
      Ordered and unordered lists are unstyled by default, with no bullets/numbers and no margin or padding.
      Use 'list-style-type' and 'list-style-position' utilities: class="list-disc list-inside"
      Unstyled lists are not announced as lists by VoiceOver.
      If your content is truly a list but you would like to keep it unstyled, add a "list" role to the element:
      <ul role="list">
    */
    ol,
    ul,
    menu {
      list-style: none;
      margin: 0;
      padding: 0;
    }

    /* Reset default styling for dialogs. */
    dialog {
      padding: 0;
    }

    /* Prevent resizing textareas horizontally by default. */
    textarea {
      resize: vertical;
    }

    /*
      1. Reset the default placeholder opacity in Firefox.
      2. Set the default placeholder color to the user's configured gray 400 color.
    */
    input::placeholder,
    textarea::placeholder {
      opacity: 1; /* 1 */
      color: theme('colors.gray.400', #9ca3af); /* 2 */
    }

    /* Set the default cursor for buttons. */
    button,
    [role="button"] {
      cursor: pointer;
    }

    /* Make sure disabled buttons don't get the pointer cursor. */
    :disabled {
      cursor: default;
    }

    /*
      1. Make replaced elements `display: block` by default.
      2. Add `vertical-align: middle` to align replaced elements more sensibly by default.
        This can trigger a poorly considered lint error in some tools but is included by design.
    */
    img,
    svg,
    video,
    canvas,
    audio,
    iframe,
    embed,
    object {
      display: block; /* 1 */
      vertical-align: middle; /* 2 */
    }

    /* Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. */
    img,
    video {
      max-width: 100%;
      height: auto;
    }

    /* Make elements with the HTML hidden attribute stay hidden by default */
    [hidden] {
      display: none;
    }
  

Layout


    // --- ASPECT RATIO - aspect ratio of an element
    aspect-auto   // aspect-ratio: auto;
    aspect-square // aspect-ratio: 1 / 1;
    aspect-video  // aspect-ratio: 16 / 9;
    aspect-[4/3]  // arbitrary value
    // usage:
    <iframe class="w-full aspect-video hover:aspect-square xl:aspect-square" src="..."></iframe>
    // tailwind.config.js > theme.extend.aspectRatio
    module.exports = {
      theme: {
        extend: {
          aspectRatio: {
            '4/3': '4 / 3',
    } } } }


    // --- CONTAINER - fixing element width to the current breakpoint
    // sets the 'max-width' of an element to match the 'min-width' of the current breakpoint.
    // design for a fixed set of screen sizes.
    // usage, container at only a certain breakpoint and up:
    <div class="xl:container xl:mx-auto"> ... </div>
    // centered container with horizontal padding:
    <div class="container mx-auto px-4"> ... </div>
    // tailwind.config.js > theme.container
    module.exports = {
      theme: {
        container: {
          center: true,    // center containers by default
          padding: '2rem', // horizontal padding by default
          // different padding amount for each breakpoint:
          padding: {
            DEFAULT: '1rem',
            sm: '2rem',
            lg: '4rem',
            xl: '5rem',
            '2xl': '6rem',
    } } } }


    // --- COLUMNS - number of columns for the content within an element
    // column width will be automatically adjusted to accommodate that number
    columns-1   // columns: 1;
    // ...
    columns-12  // columns: 12;
    columns-auto// columns: auto;
    columns-3xs // columns: 16rem; /* 256px */
    columns-2xs // columns: 18rem; /* 288px */
    columns-xs  // columns: 20rem; /* 320px */
    columns-sm  // columns: 24rem; /* 384px */
    columns-md  // columns: 28rem; /* 448px */
    columns-lg  // columns: 32rem; /* 512px */
    columns-xl  // columns: 36rem; /* 576px */
    // ...
    columns-7xl // columns: 80rem; /* 1280px */
    columns-[10rem] // arbitrary value
    // usage:
    <div class="columns-2 hover:columns-3 xl:columns-1">
      <img class="w-full aspect-video" src="..." />
      <img class="w-full aspect-square" src="..." /> // ...
    </div>
    <div class="gap-8 columns-3xs"> // specify width between columns
      <img class="w-full aspect-video" src="..." />
      <img class="w-full aspect-square" src="..." />
      // ...
    </div>
    // tailwind.config.js > theme.columns | theme.extend.columns
    module.exports = {
      theme: {
        extend: {
          columns: {
            '4xs': '14rem',
    } } } }


    // --- BREAK AFTER/BEFORE - column or page break after/before an element
    break-[after|before]-*
    break-after-auto    // break-after: auto;
    break-after-avoid   // break-after: avoid;
    break-after-all     // break-after: all;
    break-after-left    // break-after: left;
    break-after-right   // break-after: right;
    break-after-column  // break-after: column;
    break-after-page    // break-after: page;
    break-after-avoid-page // break-after: avoid-page;
    // --- BREAK INSIDE - column or page break within an element
    break-inside-auto   // break-inside: auto;
    break-inside-avoid  // break-inside: avoid;
    break-inside-avoid-column // break-inside: avoid-column;
    break-inside-avoid-page   // break-inside: avoid-page;
    // usage:
    <div class="columns-2">
      <p> ... </p>
      <p class="break-after-column"> ... </p>
      <p class="hover:break-before-column"> ... </p>
      <p class="xl:break-inside-avoid-column"> ... </p>
    </div>


    // --- BOX DECORATION BREAK - element fragments rendering across multiple lines, columns, or pages
    // whether properties like background, border, border-image, box-shadow, clip-page, margin, and padding
    // should be rendered as if the element were one continuous fragment, or distinct blocks.
    box-decoration-clone // box-decoration-break: clone;
    box-decoration-slice // box-decoration-break: slice;
    // usage:
    <span class="box-decoration-clone hover:box-decoration-slice xl:box-decoration-slice
      bg-gradient-to-r from-indigo-600 to-pink-500 text-white px-2"
    >
      Hello<br />
      World
    </span>


    // --- BOX SIZING - how the browser should calculate element total size
    // to include or not the element borders and padding when a height or width is set
    box-border  // box-sizing: border-box; (default with preflight enabled)
    box-content // box-sizing: content-box;
    // usage:
    <div class="box-border hover:box-content xl:box-content h-32 w-32 p-4 border-4"> ... </div>


    // --- DISPLAY - display box type of an element
    block         // display: block;
    inline-block  // display: inline-block;
    inline        // display: inline;
    flex          // display: flex; // block-level flex container
    inline-flex   // display: inline-flex;
    table         // display: table;
    inline-table  // display: inline-table;
    table-caption // display: table-caption;
    table-cell    // display: table-cell;
    table-column  // display: table-column;
    table-column-group // display: table-column-group;
    table-footer-group // display: table-footer-group;
    table-header-group // display: table-header-group;
    table-row-group // display: table-row-group;
    table-row     // display: table-row;
    flow-root     // display: flow-root; // block-level element with its own block formatting context
    grid          // display: grid;
    inline-grid   // display: inline-grid;
    contents      // display: contents; // 'phantom' container whose children act like direct children of the parent
    list-item     // display: list-item;
    hidden        // display: none;
    // usage:
    <div class="flex hover:inline-flex xl:inline-flex"> ... </div>


    // --- FLOATS - wrapping of content around an element
    float-start // float: inline-start;
    float-end   // float: inline-end;
    float-right // float: right;
    float-left  // float: left;
    float-none  // float: none;
    // usage:
    <img class="float-right hover:float-left xl:float-left" src="path/to/image.jpg" />
    <p> ... </p>


    // --- CLEAR - wrapping of content around an element
    clear-start // clear: inline-start;
    clear-end   // clear: inline-end;
    clear-left  // clear: left;
    clear-right // clear: right;
    clear-both  // clear: both;
    clear-none  // clear: none;
    // usage:
    <article>
      <img class="float-left" src="path/to/image.jpg" />
      <img class="float-right" src="path/to/image.jpg" />
      <p class="clear-left hover:clear-none xl:clear-none"> ... </p>
    </article>


    // --- ISOLATION - whether an element should explicitly create a new stacking context
    isolate        // isolation: isolate;
    isolation-auto // isolation: auto;
    // usage:
    <div class="isolate hover:isolation-auto xl:isolation-auto"> ... </div>


    // --- OBJECT FIT - replaced element content resize behavior
    object-contain    // object-fit: contain;
    object-cover      // object-fit: cover;
    object-fill       // object-fit: fill;
    object-none       // object-fit: none;
    object-scale-down // object-fit: scale-down;
    // usage:
    <div class="bg-indigo-300">
      <img class="object-cover hover:object-scale-down xl:object-none h-48 w-96" />
    </div>


    // --- OBJECT POSITION - replaced element content position within its container
    object-bottom       // object-position: bottom;
    object-center       // object-position: center;
    object-left         // object-position: left;
    object-left-bottom  // object-position: left bottom;
    object-left-top     // object-position: left top;
    object-right        // object-position: right;
    object-right-bottom // object-position: right bottom;
    object-right-top    // object-position: right top;
    object-top          // object-position: top;
    object-[center_bottom] // with arbitrary value 'center_bottom'
    // usage:
    <img class="object-center hover:object-top xl:object-[center_bottom]" src="...">
    // tailwind.config.js > theme.objectPosition | theme.extend.objectPosition
    module.exports = {
      theme: {
        extend: {
          objectPosition: {
            'center-bottom': 'center bottom',
    } } } }


    // --- OVERFLOW - element handling of content that is too large for the container
    overflow-auto      // overflow: auto;
    overflow-hidden    // overflow: hidden;
    overflow-clip      // overflow: clip;
    overflow-visible   // overflow: visible;
    overflow-scroll    // overflow: scroll;
    overflow-x-auto    // overflow-x: auto;
    overflow-y-auto    // overflow-y: auto;
    overflow-x-hidden  // overflow-x: hidden;
    overflow-y-hidden  // overflow-y: hidden;
    overflow-x-clip    // overflow-x: clip;
    overflow-y-clip    // overflow-y: clip;
    overflow-x-visible // overflow-x: visible;
    overflow-y-visible // overflow-y: visible;
    overflow-x-scroll  // overflow-x: scroll;
    overflow-y-scroll  // overflow-y: scroll;
    // usage:
    <div class="overflow-visible hover:overflow-scroll xl:overflow-auto"> ... </div>


    // --- OVERSCROLL BEHAVIOR - browser behavior when reaching the boundary of a scrolling area
    overscroll-auto      // overscroll-behavior: auto;
    overscroll-contain   // overscroll-behavior: contain;
    overscroll-none      // overscroll-behavior: none;
    overscroll-y-auto    // overscroll-behavior-y: auto;
    overscroll-y-contain // overscroll-behavior-y: contain;
    overscroll-y-none    // overscroll-behavior-y: none;
    overscroll-x-auto    // overscroll-behavior-x: auto;
    overscroll-x-contain // overscroll-behavior-x: contain;
    overscroll-x-none    // overscroll-behavior-x: none;
    // usage:
    <html class="overscroll-auto focus:overscroll-contain xl:overscroll-contain">
      // ...
    </html>


    // --- POSITION - element position in the DOM
    static   // position: static;
    fixed    // position: fixed;
    absolute // position: absolute;
    relative // position: relative;
    sticky   // position: sticky;
    // usage:
    <div class="relative hover:absolute xl:absolute">
      <p> relative parent </p>
      <div class="absolute bottom-0 left-0">
        <p> absolute child </p>
      </div>
    </div>
    <div class="static">
      <!-- Static parent -->
      <div class="static"><p> static child </p></div>
      <div class="inline-block"><p> static sibling </p></div>
      <!-- Static parent -->
      <div class="absolute"><p> absolute child </p></div>
      <div class="inline-block"><p> static sibling </p></div>
    </div>
    <div class="relative">
      <div class="fixed top-0 left-0 right-0"> ... </div>
      <div> ... </div>
    </div>
    // sticky positioning elements:
    // relative until it crosses a specified threshold, then treat it as fixed until its parent is off screen.
    // any offsets are calculated relative to the element normal position
    // and the element will act as a position reference for absolutely positioned children.
    <div>
      <div>
        <div class="sticky top-0"> A </div>
        <div>
          <div>
            <img src="..." /> <strong> ... </strong>
          </div>
          // ...
        </div>
      </div>
      <div>
        <div class="sticky top-0"> B </div>
        // ...
      </div>
      // ...
    </div>


    // --- TOP / RIGHT / BOTTOM / LEFT - placement of positioned elements
    inset-{VALUE}   // inset: VALUE;
    inset-x-{VALUE} // left: VALUE; right: VALUE;
    inset-y-{VALUE} // top: VALUE; bottom: VALUE;
    start-{VALUE}   // inset-inline-start: VALUE;
    end-{VALUE}     // inset-inline-end: VALUE;
    top-{VALUE}     // top: VALUE;
    right-{VALUE}   // right: VALUE;
    bottom-{VALUE}  // bottom: VALUE;
    left-{VALUE}    // left: VALUE;
    // values:
    0, px, 0.5, 1, ..., 96
    1/2, 1/3, 2/3, 1/4, 2/4, 3/4
    full, auto
    [{ARBITRARY_VALUE}]
    // usage:
    <div class="relative h-32 w-32">
      <div class="absolute left-0 hover:top-6 xl:h-16  w-16"> 01 </div> // Pin to top left corner
      <div class="absolute inset-x-0 top-0 h-16"> 02 </div> // Span top edge
      <div class="absolute top-0 right-0 h-16 w-16"> 03 </div> // Pin to top right corner
      <div class="absolute inset-y-0 left-0 w-16">04 </div> // Span left edge
      <div class="absolute inset-0"> 05 </div> // Fill entire parent
      <div class="absolute inset-y-0 right-0 w-16"> 06 </div> // Span right edge
      <div class="absolute bottom-0 left-0 h-16 w-16"> 07 </div> // Pin to bottom left corner
      <div class="absolute inset-x-0 bottom-0 h-16"> 08 </div> // Span bottom edge
      <div class="absolute bottom-0 right-0 h-16 w-16"> 09 </div> // Pin to bottom right corner
    </div>
    // prefix the class name with a dash to convert it to a negative value:
    <div class="absolute h-14 w-14 -left-4 -top-4"> ... </div>
    // arbitrary values:
    <div class="top-[3px]"> ... </div>
    // tailwind.config.js > theme.spacing | theme.extend.spacing | theme.extend.top|right|bottom|left|inset
    module.exports = {
      theme: {
        extend: {
          spacing: { // customize Tailwind spacing scale
            '3px': '3px',
          },
          inset: { // customize just the top/right/bottom/left/inset scale
            '3px': '3px',
          }
    } } }


    // --- VISIBILITY - visibility of an element
    visible   // visibility: visible; // undoing the 'invisible' utility
    invisible // visibility: hidden;
    collapse  // visibility: collapse;
    // usage:
    // invisible - to hide an element, but still maintain its place in the DOM, affecting the layout of other elements
    <div class="grid grid-cols-3 gap-4">
      <div> 01 </div>
      <div class="visible hover:invisible xl:invisible"> 02 </div>
      <div> 03 </div>
    </div>
    // collapse - hide table rows, row groups, columns, and column groups
    // as if they were set to 'display: none', but without impacting the size of other rows and columns.
    // dynamically toggle rows and columns without affecting the table layout
    <table>
      <thead>
        <tr> <th> Invoice #</th> <th> Client </th> <th> Amount </th> </tr>
      </thead>
      <tbody>
        <tr>
          <td> #100 </td> <td> ... </td> <td> $2,000.00 </td>
        </tr>
        <tr class="collapse">
          <td>#101</td> <td> ... </td> <td> $545.00 </td>
        </tr>
        <tr>
          <td>#102</td> <td> ... </td> <td> $10,000.25 </td>
        </tr>
      </tbody>
    </table>


    // --- Z-INDEX - stack order of an element
    z-0    // z-index: 0;
    z-10   // z-index: 10;
    z-20   // z-index: 20;
    z-30   // z-index: 30;
    z-40   // z-index: 40;
    z-50   // z-index: 50;
    z-auto // z-index: auto;
    // usage:
    <div class="z-40 hover:z-50 xl:z-50"> ... </div>
    <div class="z-0"> ... </div>
    <div class="z-[100]"> arbitrary value </div>
    <div class="-z-50"> negative value </div>
    // tailwind.config.js > theme.zIndex | theme.extend.zIndex
    module.exports = {
      theme: {
        extend: {
          zIndex: {
            '100': '100',
    } } } }
  

Flex & Grid


    // --- FLEX - how flex items both grow and shrink
    flex-1       // flex: 1 1 0%;   // grow and shrink as needed
    flex-auto    // flex: 1 1 auto; // grow and shrink
    flex-initial // flex: 0 1 auto; // shrink but not grow
    flex-none    // flex: none;     // prevent growing or shrinking
    // usage:
    <div class="flex">
      <div class="flex-none hover:flex-none xl:flex-auto w-14 h-14"> 01 </div>
      <div class="flex-initial w-64"> 02 </div>
      <div class="flex-initial w-32"> 03 </div>
      <div class="flex-[2_2_0%] w-32"> arbitrary value </div>
    </div>
    // tailwind.config.js > theme.flex | theme.extend.flex
    module.exports = {
      theme: {
        extend: {
          flex: {
            '2': '2 2 0%'
    } } } }


    // --- FLEX BASIS - initial size of flex items
    basis-{VALUE}   // flex-basis: VALUE;
    // values:
    0, px, 0.5, 1, ..., 96
    1/2, 1/3, 2/3, 1/4, 2/4, 3/4, 1/6, 2/6, 3/6, 4/6, 5/6
    1/12, 2/12, 3/12, 4/12, 5/12, 6/12, 7/12, 8/12, 9/12, 10/12, 11/12
    full, auto
    [{ARBITRARY_VALUE}]
    // usage:
    <div class="flex flex-row">
      <div class="basis-1/4 hover:basis-1/2 xl:basis-1/2"> 01 </div>
      <div class="basis-1/4"> 02 </div>
      <div class="basis-1/2"> 03 </div>
    </div>
    // tailwind.config.js > theme.spacing | theme.extend.spacing | theme.flexBasis | theme.extend.flexBasis
    module.exports = {
      theme: {
        extend: {
          spacing: { // customize Tailwind spacing scale
            '112': '28rem',
            '128': '32rem',
          },
          flexBasis: { // customize just the flex basis
            '1/7': '14.2857143%',
            '2/7': '28.5714286%',
            '3/7': '42.8571429%',
            '4/7': '57.1428571%',
            '5/7': '71.4285714%',
            '6/7': '85.7142857%',
          }
    } } }


    // --- FLEX DIRECTION - direction of flex items
    flex-row         // flex-direction: row;
    flex-row-reverse // flex-direction: row-reverse;
    flex-col         // flex-direction: column;
    flex-col-reverse // flex-direction: column-reverse;
    // usage:
    <div class="flex flex-row hover:flex-row xl:flex-row">
      <div> 01 </div> <div> 02 </div> <div> 03 </div>
    </div>


    // --- FLEX WRAP - flex items wrap
    flex-wrap         // flex-wrap: wrap;
    flex-wrap-reverse // flex-wrap: wrap-reverse;
    flex-nowrap       // flex-wrap: nowrap;
    // usage:
    <div class="flex flex-nowrap hover:flex-wrap xl:flex-wrap-reverse">
      <div> 01 </div> <div> 02 </div> <div> 03 </div>
    </div>


    // --- FLEX GROW - how flex items grow
    grow   // flex-grow: 1; // grow to fill any available space
    grow-0 // flex-grow: 0; // prevent from growing
    // usage:
    <div class="flex">
      <div class="flex-none w-14 h-14"> 01 </div>
      <div class="grow hover:grow-0 xl:grow-[2] h-14"> 02 </div>
      <div class="flex-none w-14 h-14"> 03 </div>
    </div>
    // tailwind.config.js > theme.flexGrow | theme.extend.flexGrow
    module.exports = {
      theme: {
        extend: {
          flexGrow: {
            2: '2'
    } } } }


    // --- FLEX SHRINK - how flex items shrink
    shrink   // flex-shrink: 1; // allow a flex item to shrink if needed
    shrink-0 // flex-shrink: 0; // prevent shrinking
    // usage:
    <div class="flex">
      <div class="flex-none w-14 h-14"> 01 </div>
      <div class="shrink hover:shrink-0 xl:shrink-0 w-64 h-14"> 02 </div>
      <div class="flex-none hover:shrink-[2] 0w-14 h-14"> arbitrary value </div>
    </div>
    // tailwind.config.js > theme.flexShrink | theme.extend.flexShrink
    module.exports = {
      theme: {
        extend: {
          flexShrink: {
            2: '2'
    } } } }


    // --- ORDER - order of flex and grid items
    order-1     // order: 1;
    // ...
    order-12    // order: 12;
    order-first // order: -9999;
    order-last  // order: 9999;
    order-none  // order: 0;
    // usage:
    <div class="flex justify-between ...">
      <div class="order-first hover:order-last xl:order-last"> 01 </div>
      <div class="-order-1"> negative value </div>
      <div class="order-[17]"> 03 </div>
    </div>
    // tailwind.config.js > theme.order | theme.extend.order
    module.exports = {
      theme: {
        extend: {
          order: {
            '13': '13'
    } } } }


    // --- GRID TEMPLATE COLUMNS - for specifying the columns in a grid layout
    grid-cols-1       // grid-template-columns: repeat(1, minmax(0, 1fr));
    // ...
    grid-cols-12      // grid-template-columns: repeat(12, minmax(0, 1fr));
    grid-cols-none    // grid-template-columns: none;
    grid-cols-subgrid // grid-template-columns: subgrid;
    // usage:
    <div class="grid grid-cols-4 gap-4 hover:grid-cols-6 xl:grid-cols-[200px_minmax(900px,_1fr)_100px]">
      <div> 01 </div>
      // ...
      <div> 09 </div>
    </div>
    // subgrid, adopt the column tracks defined by parent:
    <div class="grid grid-cols-4 gap-4">
      <div> 01 </div>
      // ...
      <div> 05 </div>
      <div class="grid grid-cols-subgrid gap-4 col-span-3">
        <div class="col-start-2"> 06 </div>
      </div>
    </div>
    // tailwind.config.js > theme.gridTemplateColumns | theme.extend.gridTemplateColumns
    module.exports = {
      theme: {
        extend: {
          gridTemplateColumns: {
            '16': 'repeat(16, minmax(0, 1fr))', // simple 16 column grid
            'footer': '200px minmax(900px, 1fr) 100px', // complex site-specific column configuration
    } } } }


    // --- GRID COLUMN START / END - elements size and place across grid columns
    col-auto       // grid-column: auto;
    col-span-1     // grid-column: span 1 / span 1;
    // ...
    col-span-12    // grid-column: span 12 / span 12;
    col-span-full  // grid-column: 1 / -1;
    col-start-1    // grid-column-start: 1;
    // ...
    col-start-13   // grid-column-start: 13;
    col-start-auto // grid-column-start: auto;
    col-end-1      // grid-column-end: 1;
    // ...
    col-end-13     // grid-column-end: 13;
    col-end-auto   // grid-column-end: auto;
    // usage:
    <div class="grid grid-cols-3 gap-4">
      <div class="..."> 01 </div>
      <div class="..."> 02 </div>
      <div class="..."> 03 </div>
      <div class="col-span-2"> 04 </div>
      <div class="..."> 05 </div>
      <div class="..."> 06 </div>
      <div class="col-span-2"> 07 </div>
    </div>
    // make an element start or end at the nth grid line,
    // combined with the col-span-{n} utilities to span a specific number of columns.
    // CSS grid lines start at 1,full-width element in a 6-column grid would start at line 1 and end at line 7.
    <div class="grid grid-cols-6 gap-4">
      <div class="col-start-2 col-span-4"> 01 </div>
      <div class="col-start-1 col-end-3"> 02 </div>
      <div class="col-end-7 col-span-2"> 03 </div>
      <div class="col-start-1 col-end-7"> 04 </div>
    </div>
    <div class="col-span-2 hover:col-span-6 xl:col-[16_/_span_16]"> ... </div>
    // tailwind.config.js > gridColumn | gridColumnStart | gridColumnEnd
    module.exports = {
      theme: {
        extend: {
          gridColumn: {
            'span-16': 'span 16 / span 16',
          },
          gridColumnStart: { // gridColumnEnd
            '9': '9',
            '10': '10',
            '11': '11',
          }
    } } }


    // --- GRID TEMPLATE ROWS - for specifying the rows in a grid layout
    grid-rows-1       // grid-template-rows: repeat(1, minmax(0, 1fr));
    // ...
    grid-rows-12      // grid-template-rows: repeat(12, minmax(0, 1fr));
    grid-rows-none    // grid-template-rows: none;
    grid-rows-subgrid // grid-template-rows: subgrid;
    // usage:
    <div class="grid grid-rows-4 gap-2 hover:grid-rows-6 xl:grid-rows-[200px_minmax(900px,_1fr)_100px]">
      <div> 01 </div>
      // ...
      <div> 09 </div>
    </div>
    // subgrid, adopt the row tracks defined by parent:
    <div class="grid grid-rows-4 grid-flow-col gap-4">
      <div> 01 </div>
      // ...
      <div> 05 </div>
      <div class="grid grid-rows-subgrid gap-4 row-span-3">
        <div class="row-start-2"> 06 </div>
      </div>
    </div>
    // tailwind.config.js > theme.gridTemplateRows | theme.extend.gridTemplateRows
    module.exports = {
      theme: {
        extend: {
          gridTemplateRows: {
            '16': 'repeat(16, minmax(0, 1fr))', // simple 16 row grid
            'footer': '200px minmax(900px, 1fr) 100px', // complex site-specific row configuration
    } } } }


    // --- GRID ROW START / END - elements size and place across grid rows
    row-auto       // grid-row: auto;
    row-span-1     // grid-row: span 1 / span 1;
    // ...
    row-span-12    // grid-row: span 12 / span 12;
    row-span-full  // grid-row: 1 / -1;
    row-start-1    // grid-row-start: 1;
    // ...
    row-start-13   // grid-row-start: 13;
    row-start-auto // grid-row-start: auto;
    row-end-1      // grid-row-end: 1;
    // ...
    row-end-13     // grid-row-end: 13;
    row-end-auto   // grid-row-end: auto;
    // usage:
    <div class="grid grid-rows-3 grid-flow-col gap-4">
      <div class="row-span-3"> 01 </div>
      <div class="col-span-2"> 02 </div>
      <div class="row-span-2 col-span-2"> 03 </div>
    </div>
    // make an element start or end at the nth grid line,
    // combined with the row-span-{n} utilities to span a specific number of rows.
    // CSS grid lines start at 1, full-height element in a 3-row grid would start at line 1 and end at line 4
    <div class="grid grid-rows-3 grid-flow-col gap-4">
      <div class="row-start-2 row-span-2"> 01 </div>
      <div class="row-end-3 row-span-2"> 02 </div>
      <div class="row-start-1 row-end-4"> 03 </div>
    </div>
    <div class="row-span-2 hover:row-span-6 xl:row-[16_/_span_16]"> ... </div>
    // tailwind.config.js > gridRow | gridRowStart | gridRowEnd
    module.exports = {
      theme: {
        extend: {
          gridRow: {
            'span-16': 'span 16 / span 16',
          },
          gridRowStart: { // gridRowumnEnd
            '9': '9',
            '10': '10',
            '11': '11',
          }
    } } }


    // --- GRID AUTO FLOW - grid elements auto-placement
    grid-flow-row       // grid-auto-flow: row;
    grid-flow-col       // grid-auto-flow: column;
    grid-flow-dense     // grid-auto-flow: dense;
    grid-flow-row-dense // grid-auto-flow: row dense;
    grid-flow-col-dense // grid-auto-flow: column dense;
    // usage:
    <div class="grid grid-flow-col hover:grid-flow-row xl:grid-flow-row grid-cols-3 grid-rows-3 ...">
      <div class="col-span-2"> 01 </div>
      <div class="col-span-2"> 02 </div>
      <div> 03 </div>
      <div> 04 </div>
      <div> 05 </div>
    </div>


    // --- GRID AUTO COLUMNS - size of implicitly-created grid columns
    auto-cols-auto // grid-auto-columns: auto;
    auto-cols-min  // grid-auto-columns: min-content;
    auto-cols-max  // grid-auto-columns: max-content;
    auto-cols-fr   // grid-auto-columns: minmax(0, 1fr);
    // usage:
    <div class="grid grid-flow-col auto-cols-max hover:auto-cols-min xl:auto-cols-[minmax(0,_2fr)]">
      <div> 01 </div>
      <div> 02 </div>
      <div> 03 </div>
    </div>
    // tailwind.config.js > theme.gridAutoColumns | theme.extend.gridAutoColumns
    module.exports = {
      theme: {
        extend: {
          gridAutoColumns: {
            '2fr': 'minmax(0, 2fr)',
    } } } }


    // --- GRID AUTO ROWS - size of implicitly-created grid rows
    auto-rows-auto // grid-auto-rows: auto;
    auto-rows-min  // grid-auto-rows: min-content;
    auto-rows-max  // grid-auto-rows: max-content;
    auto-rows-fr   // grid-auto-rows: minmax(0, 1fr);
    // usage:
    <div class="grid grid-flow-row auto-rows-max hover:auto-rows-min xl:auto-rows-[minmax(0,_2fr)]">
      <div> 01 </div>
      <div> 02 </div>
      <div> 03 </div>
    </div>
    // tailwind.config.js > theme.gridAutoRows | theme.extend.gridAutoRows
    module.exports = {
      theme: {
        extend: {
          gridAutoRows: {
            '2fr': 'minmax(0, 2fr)',
    } } } }


    // --- GAP - gutters between grid and flexbox items
    gap-0     // gap: 0px;
    gap-x-0   // column-gap: 0px;
    gap-y-0   // row-gap: 0px;
    gap-px    // gap: 1px;
    gap-x-px  // column-gap: 1px;
    gap-y-px  // row-gap: 1px;
    gap-0.5   // gap: 0.125rem; /* 2px */
    gap-x-0.5 // column-gap: 0.125rem; /* 2px */
    gap-y-0.5 // row-gap: 0.125rem; /* 2px */
    gap-1     // gap: 0.25rem; /* 4px */
    gap-x-1   // column-gap: 0.25rem; /* 4px */
    gap-y-1   // row-gap: 0.25rem; /* 4px */
    // ...
    gap-96    // gap: 24rem; /* 384px */
    gap-x-96  // column-gap: 24rem; /* 384px */
    gap-y-96  // row-gap: 24rem; /* 384px */
    // usage:
    <div class="grid gap-4 hover:gap-6 xl:gap-[2.75rem] grid-cols-2">
      <div> 01 </div>
      <div> 02 </div>
    </div>
    // change the gap between rows and columns independently:
    <div class="grid gap-x-8 gap-y-4 grid-cols-3">
      <div> 01 </div>
      <div> 02 </div>
    </div>
    // tailwind.config.js > theme.spacing | theme.extend | theme.gap | theme.extend.gap
    module.exports = {
      theme: {
        extend: {
          spacing: { // customize Tailwind spacing scale
            '11': '2.75rem',
          },
          gap: { // customize just the gap scale
            '11': '2.75rem',
          }
    } } }


    // --- JUSTIFY CONTENT - flex and grid items position along a container main axis
    justify-normal  // justify-content: normal;
    justify-start   // justify-content: flex-start;
    justify-end     // justify-content: flex-end;
    justify-center  // justify-content: center;
    justify-between // justify-content: space-between;
    justify-around  // justify-content: space-around;
    justify-evenly  // justify-content: space-evenly;
    justify-stretch // justify-content: stretch;
    // usage:
    <div class="flex justify-start hover:justify-between xl:justify-between">
      <div> 01 </div>
      <div> 02 </div>
      <div> 03 </div>
    </div>


    // --- JUSTIFY ITEMS - grid items alignment along their inline axis
    justify-items-start   // justify-items: start;
    justify-items-end     // justify-items: end;
    justify-items-center  // justify-items: center;
    justify-items-stretch // justify-items: stretch;
    // usage:
    <div class="grid justify-items-start hover:justify-items-center xl:justify-items-center">
      <div> 01 </div>
      <div> 02 </div>
      <div> 03 </div>
    </div>


    // --- JUSTIFY SELF - individual grid item is alignment along its inline axis
    justify-self-auto    // justify-self: auto;
    justify-self-start   // justify-self: start;
    justify-self-end     // justify-self: end;
    justify-self-center  // justify-self: center;
    justify-self-stretch // justify-self: stretch;
    // usage:
    <div class="grid justify-items-stretch">
      // ...
      <div class="justify-self-start hover:justify-self-end xl:justify-self-end"> 02 </div>
      // ...
    </div>


    // --- ALIGN CONTENT - rows positioning in multi-row flex and grid containers
    content-normal  // align-content: normal;
    content-center  // align-content: center;
    content-start   // align-content: flex-start;
    content-end     // align-content: flex-end;
    content-between // align-content: space-between;
    content-around  // align-content: space-around;
    content-evenly  // align-content: space-evenly;
    content-baseline// align-content: baseline;
    content-stretch // align-content: stretch; - </content-around gap-4">
    <div class="h-56 grid grid-cols-3 gap-4 content-around">
      <div> 01 </div>
      <div> 02 </div>
      <div> 03 </div>
    </div>


    // --- ALIGN ITEMS - flex and grid items positioning along a container cross axis
    items-start    // align-items: flex-start;
    items-end      // align-items: flex-end;
    items-center   // align-items: center;
    items-baseline // align-items: baseline;
    items-stretch  // align-items: stretch;
    // usage:
    <div class="flex items-start hover:items-end xl:items-end">
      <div class="py-4"> 01 </div>
      <div class="py-12"> 02 </div>
      <div class="py-8"> 03 </div>
    </div>


    // --- ALIGN SELF - flex or grid item is positioning along its container cross axis
    self-auto     // align-self: auto;
    self-start    // align-self: flex-start;
    self-end      // align-self: flex-end;
    self-center   // align-self: center;
    self-stretch  // align-self: stretch;w-3/4
    self-baseline // align-self: baseline;
    // usage:
    <div class="flex items-stretch">
      <div> 01 </div>
      <div class="self-start hover:self-end xl:self-end"> 02 </div>
      <div> 03 </div>
    </div>


    // --- PLACE CONTENT - how content is justified and aligned at the same time
    place-content-center   // place-content: center;
    place-content-start    // place-content: start;
    place-content-end      // place-content: end;
    place-content-between  // place-content: space-between;
    place-content-around   // place-content: space-around;
    place-content-evenly   // place-content: space-evenly;
    place-content-baseline // place-content: baseline;
    place-content-stretch  // place-content: stretch;
    // usage:
    <div class="grid grid-cols-2 place-content-start hover:place-content-end xl:place-content-end gap-4 h-48">
      <div> 01 </div>
      <div> 02 </div>
      <div> 03 </div>
      <div> 04 </div>
    </div>


    // --- PLACE ITEMS - how items are justified and aligned at the same time
    place-items-start    // place-items: start;
    place-items-end      // place-items: end;
    place-items-center   // place-items: center;
    place-items-baseline // place-items: baseline;
    place-items-stretch  // place-items: stretch;
    // usage:
    <div class="grid grid-cols-3 place-items-start hover:place-items-end xl:place-items-end gap-4">
      <div> 01 </div>
      <div> 02 </div>
      <div> 03 </div>
    </div>


    // --- PLACE SELF - how an individual item is justified and aligned at the same time
    place-self-auto    // place-self: auto;
    place-self-start   // place-self: start;
    place-self-end     // place-self: end;
    place-self-center  // place-self: center;
    place-self-stretch // place-self: stretch;
    // usage:
    <div class="grid grid-cols-3 gap-4">
      <div> 01 </div>
      <div class="place-self-start hover:place-self-end xl:place-self-end"> 02 </div>
      <div> 03 </div>
      <div> 04 </div>
      <div> 05 </div>
    </div>
  

Spacing


    // --- PADDING - controlling an element's padding
    p-{VALUE}   // padding
    px-{VALUE}  // padding-left + padding-right
    py-{VALUE}  // padding-top + padding-bottom
    ps-{VALUE}  // padding-inline-start
    pe-{VALUE}  // padding-inline-end
    pt-{VALUE}  // padding-top
    pr-{VALUE}  // padding-right
    pb-{VALUE}  // padding-bottom
    pl-{VALUE}  // padding-left
    // values:
    0, px, 0.5, 1, ..., 96
    // usage:
    <div class="p-8 hover:py-8 xl:p-[5px]"> p-8 </div>
    <div class="px-8"> ... </div>
    <div class="pr-4"> ... </div>
    <div dir="ltr"> <div class="ps-8"> ... </div> <div class="pe-8"> ... </div> </div>
    <div dir="rtl"> <div class="ps-8"> ... </div> <div class="pe-8"> ... </div> </div>
    // tailwind.config.js > theme.spacing | theme.extend.spacing | theme.padding | theme.extend.padding
    module.exports = {
      theme: {
        extend: {
          spacing: { // customize Tailwind spacing scale
            '5px': '5px',
          },
          padding: { // customize just the padding scale
            '5px': '5px',
          }
    } } }


    // --- MARGIN - element margin
    m-{VALUE}   // margin
    mx-{VALUE}  // margin-left + margin-right
    my-{VALUE}  // margin-top + margin-bottom
    ms-{VALUE}  // margin-inline-start
    me-{VALUE}  // margin-inline-end
    mt-{VALUE}  // margin-top
    mr-{VALUE}  // margin-right
    mb-{VALUE}  // margin-bottom
    ml-{VALUE}  // margin-left
    // values:
    0, px, 0.5, 1, ..., 96, auto
    // usage:
    <div class="m-8 hover:my-8 xl:m-[5px]"> m-8 </div>
    <div class="mx-8"> ... </div>
    <div class="mb-8"> ... </div>
    <div dir="ltr"> <div class="ms-8"> ... </div> <div class="me-8"> ... </div> </div>
    <div dir="rtl"> <div class="ms-8"> ... </div> <div class="me-8"> ... </div> </div>
    <div class="-mt-8 bg-sky-300"> negative value </div>
    // tailwind.config.js > theme.spacing | theme.extend.spacing | theme.margin | theme.extend.margin
    module.exports = {
      theme: {
        extend: {
          spacing: { // customize Tailwind spacing scale
            '5px': '5px',
          },
          margin: { // customize just the margin scale
            '5px': '5px',
          }
    } } }


    // --- SPACE BETWEEN - space between child elements
    space-x-{VALUE} > * + *   // margin-left: 0px;
    space-y-{VALUE} > * + *   // margin-top: 0px;
    // values:
    0, px, 0.5, 1, ..., 96, reverse
    // just a shortcut for adding margin to all-but-the-first-item in a group,
    // are not designed to handle complex cases like grids, layouts that wrap,
    // or situations where the children are rendered in a complex custom order rather than their natural DOM order.
    // usage:
    <div class="flex space-x-4"> // horizontal space between children
      <div> 01 </div>
      <div> 02 </div>
      <div> 03 </div>
    </div>
    <div class="flex flex-col space-y-[5px]"> // vertical space between children
      <div> 01 </div>
      <div> 02 </div>
      <div> 03 </div>
    </div>
    // using reverse utilities:
    <div class="flex flex-row-reverse space-x-4 space-x-reverse">
      <div> 01 </div>
      <div> 02 </div>
      <div> 03 </div>
    </div>
    <div class="flex -space-x-4"> negative value </div>
    <div class="flow-root">
      <div class="-m-2 flex flex-wrap">
        <div class="m-2"> ... </div>
        <div class="m-2"> ... </div>
        <div class="m-2"> ... </div>
      </div>
    </div>
    // tailwind.config.js > theme.spacing | theme.extend.spacing | theme.space | theme.extend.space
    module.exports = {
      theme: {
        extend: {
          spacing: { // customize Tailwind spacing scale
            '5px': '5px',
          },
          space: { // customize just the space scale
            '5px': '5px',
          }
    } } }
    // better to use the gap utilities when possible,
    // or add margin to every element with a matching negative margin on the parent:
    <div class="flow-root">
      <div class="-m-2 flex flex-wrap">
        <div class="m-2"> ... </div>
        <div class="m-2"> ... </div>
        <div class="m-2"> ... </div>
      </div>
    </div>
    // space-* utilities are not designed to work together with the divide utilities
    // ( Borders > Divide Width > divide-x-0 )
    // for those situations, consider adding margin/padding utilities to the children instead
  

Sizing


    // --- WIDTH - width of an element
    w-{VALUE}   // width
    // values:
    0, px, 0.5, 1, ..., 96
    1/2, 1/3, 2/3, 1/4, 2/4, 3/4, 1/5, 2/5, 3/5, 4/5, 1/6, 2/6, 3/6, 4/6, 5/6
    1/12, 2/12, 3/12, 4/12, 5/12, 6/12, 7/12, 8/12, 9/12, 10/12, 11/12
    full, screen, auto, min, max, fit, svw, lvw, dvw
    // usage:
    <div class="w-96 hover:w-[32rem] xl:w-screen"> ... </div>
    <div class="flex"> <div class="w-1/2 "> ... </div> <div class="w-1/2 "> ... </div> </div>
    <div class="flex"> <div class="w-1/4"> ... </div> <div class="w-3/4"> ... </div> </div>
    // tailwind.config.js > theme.spacing | theme.extend.spacing | theme.width | theme.extend.width
    module.exports = {
      theme: {
        extend: {
          spacing: { // customize Tailwind spacing scale
            '128': '32rem',
          },
          width: { // customize just the space scale
            '128': '32rem',
          }
    } } }


    // --- MIN-WIDTH - minimum width of an element
    min-w-{VALUE} // min-width
    // values:
    0, px, 0.5, 1, ..., 96, full, min, max, fit
    // usage:
    <div class="w-96">
      <div class="min-w-64"> ... </div>
      <div class="min-w-[220px]"> ... </div>
      <div class="min-w-full hover:min-w-0 xl:min-w-0"> ... </div>
    </div>
    // tailwind.config.js > theme.spacing | theme.extend.spacing | theme.minWidth | theme.extend.minWidth
    module.exports = {
      theme: {
        extend: {
          spacing: { // customize Tailwind spacing scale
            '128': '32rem',
          },
          minWidth: { // customize just the minWidth scale
            '128': '32rem',
          }
    } } }


    // --- MAX-WIDTH - maximum width of an element
    max-w-{VALUE} // max-width
    // values:
    0, px, 0.5, 1, ..., 96,
    xs, sm, md, lg, xl, 2xl, 3xl, 4xl, 5xl, 6xl, 7xl
    prose, screen-sm, screen-md, screen-lg, screen-xl, screen-2xl
    full, min, max, fit, none
    // usage:
    <div>
      <div class="w-full max-w-sm hover:max-w-lg xl:max-w-[220px]"> ... </div>
      <div class="max-w-screen-2xl"> matching a specific breakpoint </div>
    </div>
    <div class="text-sm max-w-prose">
      <p> adapt based on the font size </p>
    </div>
    // tailwind.config.js > theme.spacing | theme.extend.spacing | theme.maxWidth | theme.extend.maxWidth
    module.exports = {
      theme: {
        extend: {
          spacing: { // customize Tailwind spacing scale
            '128': '32rem',
          },
          minWidth: { // customize just the maxWidth scale
            '128': '32rem',
          }
    } } }


    // --- HEIGHT - height of an element
    h-{VALUE}   // // height
    // values:
    0, px, 0.5, 1, ..., 96
    1/2, 1/3, 2/3, 1/4, 2/4, 3/4, 1/5, 2/5, 3/5, 4/5, 1/6, 2/6, 3/6, 4/6, 5/6
    full, screen, auto, min, max, fit, svh, lvh, dvh
    // usage:
    <div class="h-96 hover:h-full xl:h-[32rem]"> ... </div>
    // tailwind.config.js > theme.spacing | theme.extend.spacing | theme.height | theme.extend.height
    module.exports = {
      theme: {
        extend: {
          spacing: { // customize Tailwind spacing scale
            '128': '32rem',
          },
          height: { // customize just the height scale
            '128': '32rem',
          }
    } } }


    // --- MIN-HEIGHT - minimum height of an elements
    min-h-{VALUE} // min-height
    // values:
    0, px, 0.5, 1, ..., 96, full, screen, min, max, fit, svh, lvh, dvh
    // usage:
    <div class="h-96 ...">
      <div class="h-24 min-h-0 hover:min-h-full xl:min-h-[220px]"> ... </div>
      <div class="min-h-full"> ... </div>
    </div>
    // tailwind.config.js > theme.spacing | theme.extend.spacing | theme.minHeight | theme.extend.minHeight
    module.exports = {
      theme: {
        extend: {
          spacing: { // customize Tailwind spacing scale
            '128': '32rem',
          },
          minHeight: { // customize just the minHeight scale
            '128': '32rem',
          }
    } } }


    // --- MAX-HEIGHT - maximum height of an element
    max-h-{VALUE} // max-height
    // values:
    0, px, 0.5, 1, ..., 96, full, screen, none, min, max, fit, svh, lvh, dvh
    // usage:
    <div class="h-96 ...">
      <div class="min-h-32 hover:max-h-full xl:max-h-[220px]"> ... </div>
      <div class="h-48 max-h-full"> ... </div>
    </div>
    // tailwind.config.js > theme.spacing | theme.extend.spacing | theme.maxHeight | theme.extend.maxHeight
    module.exports = {
      theme: {
        extend: {
          spacing: { // customize Tailwind spacing scale
            '128': '32rem',
          },
          maxHeight: { // customize just the maxHeight scale
            '128': '32rem',
          }
    } } }


    // --- SIZE - width and height of an element at the same time
    size-{VALUE} // width + height
    // values:
    0, px, 0.5, 1, ..., 96
    1/2, 1/3, 2/3, 1/4, 2/4, 3/4, 1/5, 2/5, 3/5, 4/5, 1/6, 2/6, 3/6, 4/6, 5/6
    1/12, 2/12, 3/12, 4/12, 5/12, 6/12, 7/12, 8/12, 9/12, 10/12, 11/12
    full, auto, min, max, fit
    // usage:
    <div class="size-16 hover:size-full xl:size-full"> ... </div>
    <div class="size-[32rem]"> ... </div>
    <div class="h-56 p-2">
      <div class="size-full"> ... </div>
    </div>
    // resetting the size at a particular breakpoint
    // remove an elements assigned width and height under a specific condition
    <div class="size-full xl:size-auto"> ... </div>
    // tailwind.config.js > theme.spacing | theme.extend.spacing | theme.size | theme.extend.size
    module.exports = {
      theme: {
        extend: {
          spacing: { // customize Tailwind spacing scale
            '128': '32rem',
          },
          size: { // customize just the size scale
            '128': '32rem',
          }
    } } }
  

Typography


    // --- FONT FAMILY - element font family, cross-browser defaults:
    // sans-serif stack:
    font-sans  // font-family: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
    // serif stack:
    font-serif // font-family: ui-serif, Georgia, Cambria, "Times New Roman", Times, serif;
    // monospaced stack:
    font-mono  // font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
    // usage:
    <p class="font-sans hover:font-serif xl:font-mono"> ... </p>
    <p class="font-['Open_Sans']"> ... </p>
    // tailwind.config.js > theme.fontFamily | theme.extend.fontFamily
    module.exports = {
      theme: {
        fontFamily: {
          // 'sans': ['ui-sans-serif', 'system-ui', ...], // defaults ...
          'sans': ['Helvetica', 'Arial', 'sans-serif'], // new as array
          'sans': 'Helvetica, Arial, sans-serif', // or comma-delimited format
          'body': ['"Open Sans"', ...], // escape font name invalid identifier with quotes
          'display': ['Exo\\ 2', ...],  // or escape the space
          // provide default font-feature-settings and font-variation-settings:
          sans: [
            '"Inter var", sans-serif',
            { fontFeatureSettings: '"cv11", "ss01"', fontVariationSettings: '"opsz" 32' },
          ],
    } } }
    //
    // customize the sans (default font) key in fontFamily configuration
    const defaultTheme = require('tailwindcss/defaultTheme')
    module.exports = {
      theme: {
        extend: {
          fontFamily: {
            'sans': ['"Proxima Nova"', ...defaultTheme.fontFamily.sans],
    } } } }
    // or also by adding a custom base style that sets the font-family property explicitly.
    // best approach for customized font family utilities to have different names
    // and no any more font-sans utility available in project, main.css :
    @layer base {
      html {
        font-family: "Proxima Nova", system-ui, sans-serif;
      }
    }


    // --- FONT SIZE
    text-xs   // font-size: 0.75rem; /* 12px */ line-height: 1rem; /* 16px */
    text-sm   // font-size: 0.875rem; /* 14px */ line-height: 1.25rem; /* 20px */
    text-base // font-size: 1rem; /* 16px */ line-height: 1.5rem; /* 24px */
    text-lg   // font-size: 1.125rem; /* 18px */ line-height: 1.75rem; /* 28px */
    text-xl   // font-size: 1.25rem; /* 20px */ line-height: 1.75rem; /* 28px */
    text-2xl  // font-size: 1.5rem; /* 24px */ line-height: 2rem; /* 32px */
    text-3xl  // font-size: 1.875rem; /* 30px */ line-height: 2.25rem; /* 36px */
    text-4xl  // font-size: 2.25rem; /* 36px */ line-height: 2.5rem; /* 40px */
    text-5xl  // font-size: 3rem; /* 48px */ line-height: 1;
    text-6xl  // font-size: 3.75rem; /* 60px */ line-height: 1;
    text-7xl  // font-size: 4.5rem; /* 72px */ line-height: 1;
    text-8xl  // font-size: 6rem; /* 96px */ line-height: 1;
    text-9xl  // font-size: 8rem; /* 128px */ line-height: 1;
    // usage:
    <p class="text-sm hover:text-base xl:text-[6px]"> ... </p>
    <p class="text-2xl"> ... </p>
    <p class="text-xl/8"> font size of 1.25rem and a line-height of 2rem </p>
    <p class="text-base/7"> font size of 1rem, line-height of 1.75rem </p>
    <p class="text-base/loose"> font size of 1rem, line-height of 2 </p>
    <p class="text-sm/[17px]"> arbitrary value height 17px </p>
    // tailwind.config.js > theme.fontSize | theme.extend.fontSize
    module.exports = {
      theme: {
        fontSize: {
          sm: '0.8rem',
          lg: ['20px', '28px'], // with default line-height
          // default line height using the object syntax, with default letter-spacing and font-weight values
          // [fontSize, { lineHeight?, letterSpacing?, fontWeight? }]
          '2xl': ['1.5rem', {
            lineHeight: '2rem',
            letterSpacing: '-0.01em',
            fontWeight: '500',
          }],
    } } }


    // --- FONT SMOOTHING
    antialiased          // -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
    subpixel-antialiased // -webkit-font-smoothing: auto; -moz-osx-font-smoothing: auto;
    // usage:
    <p class="subpixel-antialiased hover:antialiased xl:antialiased"> ... </p>


    // --- FONT STYLE - style of text.
    italic     // font-style: italic;
    not-italic // font-style: normal; - reset italic text at different breakpoints
    // usage:
    <p class="italic hover:not-italic xl:not-italic"> ... </p>


    // --- FONT WEIGHT
    font-thin       // font-weight: 100;
    font-extralight // font-weight: 200;
    font-light      // font-weight: 300;
    font-normal     // font-weight: 400;
    font-medium     // font-weight: 500;
    font-semibold   // font-weight: 600;
    font-bold       // font-weight: 700;
    font-extrabold  // font-weight: 800;
    font-black      // font-weight: 900;
    // usage:
    <p class="font-normal hover:font-bold xl:font-[1100]"> ... </p>
    // tailwind.config.js > theme.fontWeight | theme.extend.fontWeight
    module.exports = {
      theme: {
        fontWeight: {
          thin: '100', // ...
          black: '900',
        }
    } }


    // --- FONT VARIANT NUMERIC - composable utilities for controlling the variant of numbers
    // enable additional glyphs for numbers, fractions, and ordinal markers (in fonts that support them)
    normal-nums        // font-variant-numeric: normal;
    ordinal            // font-variant-numeric: ordinal; - special glyphs for the ordinal markers
    slashed-zero       // font-variant-numeric: slashed-zero; - force a 0 with a slash
    lining-nums        // font-variant-numeric: lining-nums; - numeric glyphs that are all aligned by their baseline
    oldstyle-nums      // font-variant-numeric: oldstyle-nums; - numeric glyphs where some numbers have descenders
    proportional-nums  // font-variant-numeric: proportional-nums; - numeric glyphs that have proportional widths (rather than uniform/tabular)
    tabular-nums       // font-variant-numeric: tabular-nums; - use numeric glyphs that have uniform/tabular widths (rather than proportional)
    diagonal-fractions // font-variant-numeric: diagonal-fractions; - replace numbers separated by a slash with common diagonal fractions
    stacked-fractions  // font-variant-numeric: stacked-fractions; - replace numbers separated by a slash with common stacked fractions
    // usage:
    <p class="proportional-nums hover:tabular-num xl:tabular-nums"> ... </p>


    // --- LETTER SPACING - tracking (letter spacing) of an element
    tracking-tighter // letter-spacing: -0.05em;
    tracking-tight   // letter-spacing: -0.025em;
    tracking-normal  // letter-spacing: 0em;
    tracking-wide    // letter-spacing: 0.025em;
    tracking-wider   // letter-spacing: 0.05em;
    tracking-widest  // letter-spacing: 0.1em;
    // usage:
    <p class="tracking-tight hover:tracking-wide xl:tracking-[.25em]"> ... </p>
    <p class="-tracking-2"> negative value </p>
    // tailwind.config.js > theme.letterSpacing | theme.extend.letterSpacing
    module.exports = {
      theme: {
        letterSpacing: {
          tightest: '-.075em',
          normal: '0',
          widest: '.25em',
        }
    } }


    // --- LINE CLAMP - truncate a block of text after a specific number of lines
    line-clamp-1  // overflow: hidden; display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 1;
    line-clamp-2  // overflow: hidden; display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2;
    line-clamp-3  // overflow: hidden; display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 3;
    line-clamp-4  // overflow: hidden; display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 4;
    line-clamp-5  // overflow: hidden; display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 5;
    line-clamp-6  // overflow: hidden; display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 6;
    line-clamp-none // overflow: visible; display: block; -webkit-box-orient: horizontal; -webkit-line-clamp: none;
    // usage:
    <p class="line-clamp-3 hover:line-clamp-4 xl:line-clamp-none"> ... </p>


    // --- LINE HEIGHT - leading (line height) of an element
    leading-3     // line-height: .75rem; /* 12px */
    // ...
    leading-10    // line-height: 2.5rem; /* 40px */
    // relative:
    leading-none    // line-height: 1;
    leading-tight   // line-height: 1.25;
    leading-snug    // line-height: 1.375;
    leading-normal  // line-height: 1.5;
    leading-relaxed // line-height: 1.625;
    leading-loose   // line-height: 2;
    // usage:
    <p class="leading-7 hover:leading-normal xl:leading-[3rem]"> ... </p>
    // font-size utilities set their own default line-height,
    // override the default line-height after setting a breakpoint-specific font-size:
    <p class="text-lg leading-loose xl:text-xl xl:leading-loose"> ... </p>
    // line-height should typically get smaller as font-size increases, default behavior here usually saves a ton of work
    // customize font-size scale to not include default line-heights.
    // tailwind.config.js > theme.lineHeight | theme.extend.lineHeight
    module.exports = {
      theme: {
        extend: {
          lineHeight: {
            'extra-loose': '2.5',
            '12': '3rem',
          }
    } } }

    // --- LIST STYLE IMAGE - marker images for list items
    list-image-none   // list-style-image: none;
    list-image-[{ARBITRARY_VALUE}]   // list-style-image: *;
    // usage:
    <ul class="list-image-[url(cm.png)] hover:list-image-[url(cm.png)] xl:list-image-[url(cm.png)]"> ... </ul>
    // tailwind.config.js > theme.listStyleImage | theme.extend.listStyleImage
    module.exports = {
      theme: {
        extend: {
          listStyleImage: {
            checkmark: 'url("/img/checkmark.png")',
          }
    } } }


    // --- LIST STYLE POSITION - position of bullets/numbers and text indentation in lists
    list-inside  // list-style-position: inside;
    list-outside // list-style-position: outside;
    // usage:
    <ul class="list-outside hover:list-inside xl:list-inside"> ... </ul>


    // --- LIST STYLE TYPE - bullet/number style of a list
    list-none    // list-style-type: none;
    list-disc    // list-style-type: disc;
    list-decimal // list-style-type: decimal;
    // usage:
    <ul class="list-none hover:list-disc md:list-[upper-roman]"> ... </ul>
    // tailwind.config.js > theme.listStyleType | theme.extend.listStyleType
    module.exports = {
      theme: {
        listStyleType: {
          none: 'none',
          // disc: 'disc',
          // decimal: 'decimal',
          square: 'square',
          roman: 'upper-roman',
        }
    } }


    // --- TEXT ALIGN
    text-left    // text-align: left;
    text-center  // text-align: center;
    text-right   // text-align: right;
    text-justify // text-align: justify;
    text-start   // text-align: start;
    text-end     // text-align: end;
    // usage:
    <p class="text-left hover:text-center xl:text-center"> ... </p>


    // --- TEXT COLOR
    text-{inherit|current|transparent|black|white}
    text-{COLOR}-50  // color: *;
    // ...
    text-{COLOR}-900 // color: *;
    text-{COLOR}-950 // color: *;
    // colors:
    // gray, slate, zinc, neutral, stone,
    // red, orange, amber, yellow, lime, green, emerald, teal,
    // cyan, sky, blue, indigo, violet, purple, fuchsia, pink, rose
    // usage:
    <p class="text-slate-500 hover:text-sky-500 xl:text-sky-500"> ... </p>
    <p class="text-[#50d71e]"> arbitrary value </p>
    // with opacity:
    <p class="text-sky-500/50 hover:text-sky-500/100 sm:text-sky-500"> ... </p>
    <p class="text-sky-500/0"> ... </p>
    <p class="text-blue-600/[.06]"> arbitrary opacity value </p>
    // tailwind.config.js > theme.colors | theme.extend.colors | theme.textColor | theme.extend.textColor


    // --- TEXT DECORATION
    underline    // text-decoration-line: underline;
    overline     // text-decoration-line: overline;
    line-through // text-decoration-line: line-through;
    no-underline // text-decoration-line: none;
    // usage:
    <a href="#" class="no-underline hover:underline xl:underline">Link</a>


    // --- TEXT DECORATION COLOR
    decoration-{inherit|current|transparent|black|white}
    decoration-{COLOR}-50  // text-decoration-color: *;
    // ...
    decoration-{COLOR}-900 // text-decoration-color: *;
    decoration-{COLOR}-950 // text-decoration-color: *;
    // colors:
    // gray, slate, zinc, neutral, stone,
    // red, orange, amber, yellow, lime, green, emerald, teal,
    // cyan, sky, blue, indigo, violet, purple, fuchsia, pink, rose
    // usage:
    <a class="underline decoration-sky-600 hover:decoration-blue-500 xl:decoration-[#50d71e]"> ... </a>
    // with opacity:
    <a class="underline decoration-sky-500/30"> ... </a>
    <strong class="underline decoration-sky-500/[.33]"> ... </strong>
    // tailwind.config.js > theme.colors | theme.extend.colors


    // --- TEXT DECORATION STYLE
    decoration-solid  // text-decoration-style: solid;
    decoration-double // text-decoration-style: double;
    decoration-dotted // text-decoration-style: dotted;
    decoration-dashed // text-decoration-style: dashed;
    decoration-wavy   // text-decoration-style: wavy;
    // usage:
    <p class="underline decoration-solid hover:decoration-dashed xl:decoration-dashed"> ... </p>


    // --- TEXT DECORATION THICKNESS
    decoration-auto        // text-decoration-thickness: auto;
    decoration-from-font   // text-decoration-thickness: from-font;
    decoration-{0|1|2|4|8} // text-decoration-thickness: {0|1|2|4|8}px;
    // usage:
    <p class="underline decoration-1 hover:decoration-4 xl:decoration-[3px]"> ... </p>
    // tailwind.config.js > theme.textDecorationThickness | theme.extend.textDecorationThickness


    // --- TEXT UNDERLINE OFFSET - offset of a text underline.
    underline-offset-auto        // text-underline-offset: auto;
    underline-offset-{0|1|2|4|8} // text-underline-offset: {0|1|2|4|8}px;
    // usage:
    <p class="underline hover:underline-offset-4 xl:underline-offset-[3px]"> ... </p>
    // tailwind.config.js > theme.textUnderlineOffset | theme.extend.textUnderlineOffset


    // --- TEXT TRANSFORM
    uppercase   // text-transform: uppercase;
    lowercase   // text-transform: lowercase;
    capitalize  // text-transform: capitalize;
    normal-case // text-transform: none;
    // usage:
    <p class="capitalize hover:uppercase xl:uppercase"> ... </p>


    // --- TEXT OVERFLOW - text overflow in an element
    truncate	    // overflow: hidden;
                  // text-overflow: ellipsis;
                  // white-space: nowrap;
    text-ellipsis	// text-overflow: ellipsis;
    text-clip	    // text-overflow: clip;
    // usage:
    <p class="truncate hover:text-clip xl:text-clip"> ... </p>
    <p class="text-ellipsis overflow-hidden"> ... </p>
    <p class="text-clip overflow-hidden"> ... </p>


    // --- TEXT WRAP - controlling how text wraps within an element
    text-wrap    // text-wrap: wrap;
    text-nowrap  // text-wrap: nowrap;
    text-balance // text-wrap: balance;
    text-pretty  // text-wrap: pretty;
    // usage:
    <h1 class="text-wrap hover:text-balance xl:text-balance"> ... </h1>


    // --- TEXT INDENT - amount of empty space shown before text in a block
    indent-{VALUE} // text-indent
    // values:
    0, px, 0.5, 1, ..., 96
    // usage:
    <p class="indent-8 hover:indent-6 xl:indent-[50%]"> ... </p>
    <div class="-indent-8"> negative value </div>
    // tailwind.config.js > theme.spacing | theme.extend.spacing | theme.textIndent | theme.extend.textIndent
    module.exports = {
      theme: {
        extend: {
          spacing: { // customize Tailwind spacing scale
            '128': '32rem',
          },
          textIndent: { // customize just the text indent
            '128': '32rem',
          }
    } } }


    // --- VERTICAL ALIGN - vertical alignment of an inline or table-cell box
    align-baseline    // vertical-align: baseline;
    align-top         // vertical-align: top;
    align-middle      // vertical-align: middle;
    align-bottom      // vertical-align: bottom;
    align-text-top    // vertical-align: text-top;
    align-text-bottom // vertical-align: text-bottom;
    align-sub         // vertical-align: sub;
    align-super       // vertical-align: super;
    // usage:
    <p class="align-middle hover:align-top xl:align-[4px]"> ... </p>


    // --- WHITESPACE - element white-space property
    whitespace-normal   // white-space: normal; - wrap normally
    whitespace-nowrap   // white-space: nowrap; - prevent text from wrapping
    whitespace-pre      // white-space: pre; - preserve newlines and spaces within an element
    whitespace-pre-line // white-space: pre-line; - preserve newlines but not spaces within an element
    whitespace-pre-wrap // white-space: pre-wrap; - preserve newlines and spaces within an element
    whitespace-break-spaces // white-space: break-spaces; - preserve newlines and spaces within an element
    // usage:
    <div class="w-3/4 ...">
      <div class="whitespace-normal hover:whitespace-pre xl:whitespace-pre"> ... </div>
    </div>


    // --- WORD BREAK
    break-normal // overflow-wrap: normal; - only add line breaks at normal word break points
    break-words  // overflow-wrap: break-word; - add line breaks mid-word if needed
    break-all    // word-break: break-all; - add line breaks whenever necessary, without trying to preserve whole words
    break-keep   // word-break: keep-all; - prevent line breaks from being applied to Chinese/Japanese/Korean (CJK) text
    break-normal // word-break: normal;
    // usage:
    <p class="break-normal hover:break-all xl:break-all"> ... </p>


    // --- HYPHENS - how words should be hyphenated
    hyphens-none   // hyphens: none; - prevent words from being hyphenated even if the line break suggestion '&shy;' is used
    hyphens-manual // hyphens: manual; - only set hyphenation points where the line break suggestion '&shy;' is used:
    hyphens-auto   // hyphens: auto; - hyphenation based on the language
    // usage:
    <p class="hyphens-none hover:hyphens-auto xl:hyphens-auto"> ... </p>


    // --- CONTENT - controlling the content of the 'before' and 'after' pseudo-elements
    content-none // content: none;
    content-[{ARBITRARY_VALUE}]
    // usage:
    <div class="before:content-['Hello_World']"> arbitrary values </div>
    <div class="before:content-['Mobile'] hover:before:content-['Hover'] xl:before:content-['XL']"> ... </div>
    <a class="text-sky-500 after:content-['_↗']" href="..." target="_blank"> ... </a>
    <div before="Hello" class="before:content-[attr(before)]">
      referencing an attribute value or other CSS features
    </div>
    <div class="before:content-['Hello_World']"> using spaces </div>
    <div class="before:content-['Hello\_World']"> using underscores </div>
    // tailwind.config.js > theme.content | theme.extend.content
    module.exports = {
      theme: {
        extend: {
          content: {
            'link': 'url("/icons/link.svg")',
          }
    } } }
  

Background


    // --- ATTACHMENT - how a background image behaves when scrolling
    bg-fixed  // background-attachment: fixed;
    bg-local  // background-attachment: local;
    bg-scroll // background-attachment: scroll;
    // usage:
    <div class="bg-local hover:bg-fixed xl:bg-fixed"> ... </div>


    // --- CLIP - bounding box of an element background
    bg-clip-border  // background-clip: border-box;
    bg-clip-padding // background-clip: padding-box;
    bg-clip-content // background-clip: content-box;
    bg-clip-text    // background-clip: text;
    // usage:
    <div class="bg-clip-text hover:bg-clip-padding hover:bg-clip-padding"> ... </div>


    // --- COLOR
    bg-{inherit|current|transparent|black|white}
    bg-{COLOR}-{50|100|200|...|900|950} // background-color: *;
    // colors:
    // gray, slate, zinc, neutral, stone,
    // red, orange, amber, yellow, lime, green, emerald, teal,
    // cyan, sky, blue, indigo, violet, purple, fuchsia, pink, rose
    // usage:
    <p class="bg-indigo-700 hover:bg-sky-500 xl:bg-indigo-500"> ... </p>
    <p class="bg-[#50d71e]"> arbitrary value </p>
    // with opacity:
    <p class="bg-sky-500/75 hover:bg-sky-500/100 sm:bg-sky-500/100"> ... </p>
    <p class="bg-sky-500/0"> ... </p>
    <p class="bg-sky-500/[.06]"> arbitrary opacity value </p>
    // tailwind.config.js > theme.colors | theme.extend.colors | backgroundColor | theme.extend.backgroundColor


    // --- ORIGIN - positioned relative to borders, padding, and content
    bg-origin-border  // background-origin: border-box;
    bg-origin-padding // background-origin: padding-box;
    bg-origin-content // background-origin: content-box;
    // usage:
    <div
      class="bg-origin-content hover:bg-origin-padding xl:bg-origin-padding p-4 border-4 border-dashed"
      style="background-image: url(...)"
    > ... </div>


    // --- POSITION
    bg-bottom      // background-position: bottom;
    bg-center      // background-position: center;
    bg-left        // background-position: left;
    bg-left-bottom // background-position: left bottom;
    bg-left-top    // background-position: left top;
    bg-right       // background-position: right;
    bg-right-bottom // background-position: right bottom;
    bg-right-top   // background-position: right top;
    bg-top         // background-position: top;
    // usage:
    <div class="bg-center hover:bg-top xl:bg-[center_top_1rem]" style="background-image: url(...)"> ... </div>
    // tailwind.config.js > theme.backgroundPosition | theme.extend.backgroundPosition


    // --- REPEAT
    bg-repeat       // background-repeat: repeat; - both vertically and horizontally
    bg-no-repeat    // background-repeat: no-repeat;
    bg-repeat-x     // background-repeat: repeat-x; - only horizontally
    bg-repeat-y     // background-repeat: repeat-y; - only vertically
    bg-repeat-round // background-repeat: round;
    bg-repeat-space // background-repeat: space;
    // usage:
    <div class="bg-repeat hover:bg-repeat-x xl:bg-repeat-x"> ... </div>


    // --- SIZE
    bg-auto    // background-size: auto; - display at default size
    bg-cover   // background-size: cover; - until fills the background layer
    bg-contain // background-size: contain; - scale to the outer edges without cropping or stretching
    // usage:
    <div class="bg-auto hover:bg-contain xl:bg-[length:600px_300px]"> ... </div>
    // tailwind.config.js > theme.backgroundSize | theme.extend.backgroundSize


    // --- IMAGE
    bg-none   // background-image: none;
    bg-gradient-to-t  // background-image: linear-gradient(to top, var(--tw-gradient-stops));
    bg-gradient-to-tr // background-image: linear-gradient(to top right, var(--tw-gradient-stops));
    bg-gradient-to-r  // background-image: linear-gradient(to right, var(--tw-gradient-stops));
    bg-gradient-to-br // background-image: linear-gradient(to bottom right, var(--tw-gradient-stops));
    bg-gradient-to-b  // background-image: linear-gradient(to bottom, var(--tw-gradient-stops));
    bg-gradient-to-bl // background-image: linear-gradient(to bottom left, var(--tw-gradient-stops));
    bg-gradient-to-l  // background-image: linear-gradient(to left, var(--tw-gradient-stops));
    bg-gradient-to-tl // background-image: linear-gradient(to top left, var(--tw-gradient-stops));
    // usage:
    <div class="bg-none hover:bg-[url('/img/hero-pattern.svg')]"> with arbitrary values </div>
    // linear gradient:
    <div class="h-14 bg-gradient-to-r from-sky-500 to-indigo-500"> ... </div>
    <div class="h-14 bg-gradient-to-r from-violet-500 to-fuchsia-500"> ... </div>
    <div class="bg-gradient-to-l hover:bg-gradient-to-r xl:bg-gradient-to-r"> ... </div>
    // tailwind.config.js > theme.backgroundImage | theme.extend.backgroundImage
    module.exports = {
      theme: {
        extend: {
          backgroundImage: {
            'hero-pattern': "url('/img/hero-pattern.svg')",
            'footer-texture': "url('/img/footer-texture.png')",
          }
    } } }


    // --- GRADIENT COLOR STOPS - color stops in background gradients
    from-{inherit|current|transparent|black|white}
    from-{0|5|10|...|95|100}%
    from-{COLOR}-{50|100|200|...|900|950}
    via-{inherit|current|transparent|black|white}
    via-{COLOR}-{50|100|200|...|900|950}
    via-{0|5|10|...|95|100}%
    to-{inherit|current|transparent|black|white}
    to-{COLOR}-{50|100|200|...|900|950}
    to-{0|5|10|...|95|100}%
    // colors:
    // gray, slate, zinc, neutral, stone,
    // red, orange, amber, yellow, lime, green, emerald, teal,
    // cyan, sky, blue, indigo, violet, purple, fuchsia, pink, rose
    // usage:
    <button type="button"
      class="bg-gradient-to-r from-green-400 to-blue-500 hover:from-pink-500 hover:to-yellow-500"
    > ... </button>
    <div class="bg-gradient-to-r from-purple-400 xl:from-yellow-500"> ... </div>
    <div class="bg-gradient-to-r from-cyan-500 to-blue-500"> ... </div>
    <div class="bg-gradient-to-r from-indigo-500 via-purple-500 to-pink-500"> ... </div>
    <div class="bg-gradient-to-r from-indigo-500 from-10% via-sky-500 via-30% to-emerald-500 to-90%"> ... </div>
    <div class="from-[#243c5a]"> use a one-off from|via|to-{color|position} </div>
    // dont add 'to-transparent' explicitly, only a from color and fade to transparent automatically
    <div class="bg-gradient-to-r from-blue-500"> ... </div>
    // tailwind.config.js > theme.colors | theme.extend.colors | theme.gradientColorStops | theme.extend.gradientColorStops
    // tailwind.config.js > theme.gradientColorStopPositions | theme.extend.gradientColorStopPositions
    module.exports = {
      theme: {
        extend: {
          gradientColorStopPositions: {
            33: '33%',
          }
    } } }
  

Borders


    // --- RADIUS
    rounded      // border-radius: 0.25rem; /* 4px */
    rounded-sm   // border-radius: 0.125rem; /* 2px */
    rounded-md   // border-radius: 0.375rem; /* 6px */
    rounded-lg   // border-radius: 0.5rem; /* 8px */
    rounded-xl   // border-radius: 0.75rem; /* 12px */
    rounded-2xl  // border-radius: 1rem; /* 16px */
    rounded-3xl  // border-radius: 1.5rem; /* 24px */
    rounded-full // border-radius: 9999px;
    rounded-none // border-radius: 0px;
    rounded-{t|r|b|l|s|e}
    rounded-{t|r|b|l|s|e}-{none|sm|md|lg|xl|2xl|3xl|full}
    // values:
    // t - border-top-left-radius + border-top-right-radius
    // r - border-top-right-radius + border-bottom-right-radius
    // b - border-bottom-right-radius + border-bottom-left-radius
    // l - border-top-left-radius + border-bottom-left-radius
    // s - border-start-start-radius + border-end-start-radius
    // e - border-start-end-radius + border-end-end-radius
    rounded-{tl|tr|br|bl|ss|se|ee|es}
    rounded-{tl|tr|br|bl|ss|se|ee|es}-{none|sm|md|lg|xl|2xl|3xl|full}
    // values:
    // tl - border-top-left-radius     , tr - border-top-right-radius
    // br - border-bottom-right-radius , bl - border-bottom-left-radius
    // ss - border-start-start-radius  , se - border-start-end-radius
    // ee - border-end-end-radius      , es - border-end-start-radius
    // usage:
    <div class="rounded hover:rounded-lg xl:rounded-lg"> ... </div>
    <button class="rounded-none hover:rounded-full"> ... </button>
    <div class="rounded-r-lg"> ... </div>
    <div class="rounded-bl-lg"> ... </div>
    <div class="rounded-[12px]"> ... </div>
    // logical properties:
    <div dir="ltr">
      <div class="rounded-s-lg"> 'rounded-s-*' IS 'rounded-l-*'(ltr) OR 'rounded-r-*'(rtl) </div>
    </div>
    // tailwind.config.js > theme.borderRadius | theme.extend.borderRadius


    // --- WIDTH
    border   // border-width: 1px;
    border-0 // border-width: 0px;
    border-2 // border-width: 2px;
    border-4 // border-width: 4px;
    border-8 // border-width: 8px;
    border-{x|y|t|r|b|l|s|e}-{0|2|4|8} // border-width in px
    // values:
    // x - border-left-width + border-right-width
    // y - border-top-width + border-bottom-width
    // t - border-top-width   , b - border-bottom-width
    // r - border-right-width , l - border-left-width
    // s - border-inline-start-width
    // e - border-inline-end-width
    // usage:
    <div class="border-t-2 border-indigo-500 hover:border-b-4 xl:border-b-2"> ... </div>
    <div class="border-t-[3px] border-sky-500"> ... </div>
    <div dir="rtl"> <div class="border-s-4"> left or right border based on the text direction </div> </div>
    // tailwind.config.js > theme.borderWidth | theme.extend.borderWidth


    // --- COLOR - border-color
    border-{inherit|current|transparent|black|white}
    border-{COLOR}-{50|100|200|...|900|950}
    border-{t|b|r|l|x|y|s|e}-{inherit|current|transparent|black|white}
    border-{t|b|r|l|x|y|s|e}-{COLOR}-{50|100|200|...|900|950}
    // values:
    // t - border-top-color   , b - border-bottom-color
    // r - border-right-color , l - border-left-color
    // x - border-left-color + border-right-color
    // y - border-top-color + border-bottom-color
    // s - border-inline-start-color
    // e - border-inline-end-color
    // colors:
    // gray, slate, zinc, neutral, stone,
    // red, orange, amber, yellow, lime, green, emerald, teal,
    // cyan, sky, blue, indigo, violet, purple, fuchsia, pink, rose
    // usage:
    <button
      class="border border-slate-300 hover:border-slate-400 xl:border-green-500"
    > ... </button>
    <div class="border-2 border-indigo-200 border-y-indigo-500"> ... </div>
    <button class="border-[#243c5a]"> arbitrary values </button>
    // opacity:
    <div class="border-2 border-indigo-500/100"> ... </div>
    <div class="border-2 border-indigo-500/75"> ... </div>
    <div class="border-2 border-indigo-600/[.55]"> opacity arbitrary values </div>
    <div class="border-2 border-indigo-200 border-l-indigo-500"> ... </div>
    <div dir="ltr"> <div class="border-s-indigo-500"> left or right border based on the text direction </div> </div>
    // tailwind.config.js > theme.colors | theme.extend.colors | theme.borderColor | theme.extend.borderColor


    // --- STYLE
    border-solid  // border-style: solid;
    border-dashed // border-style: dashed;
    border-dotted // border-style: dotted;
    border-double // border-style: double;
    border-hidden // border-style: hidden;
    border-none   // border-style: none;
    // usage:
    <div class="border-solid hover:border-dotted xl:border-dotted"> ... </div>


    // --- DIVIDE WIDTH - border width between elements
    divide // 1px
    divide-{x|y}-{0|2|4|8} // x - border-right-width + border-left-width , y - border-top-width + border-bottom-width
    divide-y-reverse   // --tw-divide-y-reverse: 1;
    divide-x-reverse   // --tw-divide-x-reverse: 1;
    // --- DIVIDE STYLE - border style between elements
    divide-solid  // border-style: solid;
    divide-dashed // border-style: dashed;
    divide-dotted // border-style: dotted;
    divide-double // border-style: double;
    divide-none   // border-style: none;
    // --- DIVIDE COLOR - border color between elements
    divide-{inherit|current|transparent|black|white} // border-color
    divide-{COLOR}-{50|100|200|...|900|950}
    // colors:
    // gray, slate, zinc, neutral, stone,
    // red, orange, amber, yellow, lime, green, emerald, teal,
    // cyan, sky, blue, indigo, violet, purple, fuchsia, pink, rose
    // usage:
    <div class="divide-y divide-teal-400 divide-dashed hover:divide-pink-400 hover:divide-solid xl:divide-pink-400 xl:divide-solid">
      <div> 01 </div> <div> 02 </div> <div> 03 </div>
    </div>
    <div class="grid grid-cols-3 divide-x">
      <div> 01 </div> <div> 02 </div> <div> 03 </div>
    </div>
    <div class="flex flex-col-reverse divide-y divide-y-reverse">
      <div> reverse </div> <div> order </div> <div> elements </div>
    </div>
    <div class="divide-y-[3px] divide-solid divide-[#243c5a] hover:divide-y-8 xl:divide-y-8"> arbitrary values </div>
    <div class="divide-y-4 divide-slate-400/25"> opacity </div>
    <div class="divide-y-4 divide-slate-400/[.24]"> opacity arbitrary value </div>
    // tailwind.config.js > theme.borderWidth | theme.divideWidth
    // tailwind.config.js > theme.colors | theme.extend.colors | theme.divideColor | theme.extend.divideColor


    // --- OUTLINE WIDTH - element outline width
    outline-{0|1|2|4|8} // outline-width in px
    // --- DIVIDE COLOR - element outline color
    outline-{inherit|current|transparent|black|white} // border-color
    outline-{COLOR}-{50|100|200|...|900|950}
    // colors:
    // gray, slate, zinc, neutral, stone,
    // red, orange, amber, yellow, lime, green, emerald, teal,
    // cyan, sky, blue, indigo, violet, purple, fuchsia, pink, rose
    // --- OUTLINE STYLE - element outline style
    outline-none   // outline: 2px solid transparent; outline-offset: 2px;
    outline        // outline-style: solid;
    outline-dashed // outline-style: dashed;
    outline-dotted // outline-style: dotted;
    outline-double // outline-style: double;
    // OUTLINE OFFSET - element outline offset
    outline-offset-{0|1|2|4|8} // outline-offset in px;
    // usage:
    <div class="outline outline-blue-500 hover:outline-2 hover:outline-blue-400 xl:outline-2 xl:outline-blue-400"> ... </div>
    <div class="outline-[5px] outline-[#243c5a] outline-offset-[3px]"> arbitrary values </div>
    <button class="outline hover:outline-dashed hover:outline-offset-2 outline-2 outline-blue-500/50"> opacity </button>
    <button class="outline-dashed outline-4 outline-pink-400/[.55]"> opacity arbitrary value </button>
    <input type="text"
      placeholder="Custom focus style"
      class="focus:outline-none focus:ring focus:border-blue-500" />
    // tailwind.config.js > theme.outlineWidth | theme.extend.outlineWidth
    // tailwind.config.js > theme.colors | theme.extend.colors | theme.outlineColor | theme.extend.outlineColor
    // tailwind.config.js > theme.outlineOffset | theme.extend.outlineOffset


    // --- RING WIDTH - creating outline rings with box-shadows
    ring // box-shadow 3px
    ring-{0|1|2|4|8} // box-shadow in px
    ring-inset
    // --- RING COLOR - color of outline rings
    ring-{inherit|current|transparent|black|white}
    ring-{COLOR}-{50|100|200|...|900|950}
    // RING OFFSET WIDTH - simulate an offset when adding outline rings
    ring-offset-{0|1|2|4|8}
    // RING OFFSET COLOR - color of outline ring offsets
    ring-offset-{inherit|current|transparent|black|white}
    ring-offset-{COLOR}-{50|100|200|...|900|950}
    // colors:
    // gray, slate, zinc, neutral, stone,
    // red, orange, amber, yellow, lime, green, emerald, teal,
    // cyan, sky, blue, indigo, violet, purple, fuchsia, pink, rose
    // usage:
    <button class="ring ring-blue-500 ring-offset-2 hover:ring-4 hover:ring-blue-500 hover:ring-offset-4 xl:ring-4"> ... </button>
    <div class="ring-[10px] ring-[#50d71e] ring-offset-[3px] ring-offset-[#50d71e]"> arbitrary values </div>
    <button class="ring ring-blue-300 hover:ring-blue-500 xl:ring-blue-500"> ... </button>
    <button class="ring focus:ring-2 ring-blue-500/50"> opacity </button>
    <button class="ring-2 ring-blue-500/[.55] ring-offset-purple-100/50"> opacity arbitrary value </button>
    <button class="ring-2 ... ring-offset-slate-50 dark:ring-offset-slate-900 hover:ring-offset-blue-500"> ... </button>
    // tailwind.config.js > theme.ringWidth | theme.extend.ringWidth
    // tailwind.config.js > theme.colors | theme.extend.colors | theme.ringColor | theme.extend.ringColor
    // tailwind.config.js > theme.ringOffsetWidth
    // tailwind.config.js > theme.colors | theme.extend.colors| theme.ringOffsetColor | theme.extend.ringOffsetColor
  

Box Shadow


    // --- SHADOW - box-shadow
    shadow
    shadow-{sm|md|lg|xl|2xl|inner|none}
    // usage:
    <div class="shadow hover:shadow-lg md:shadow-lg"> ... </div>
    <div class="shadow-[0_35px_60px_-15px_rgba(0,0,0,0.3)]"> arbitrary values </div>
    // tailwind.config.js > theme.boxShadow | theme.extend.boxShadow


    // --- COLOR
    shadow-{inherit|current|transparent|black|white}
    shadow-{COLOR}-{50|100|200|...|900|950}
    // colors:
    // gray, slate, zinc, neutral, stone,
    // red, orange, amber, yellow, lime, green, emerald, teal,
    // cyan, sky, blue, indigo, violet, purple, fuchsia, pink, rose
    // usage:
    <button class="bg-cyan-500 shadow-lg shadow-cyan-500/50"> ... </button>
    <button class="bg-blue-500 shadow-lg shadow-[#50d71e]"> ... </button>
    <button class="shadow-lg shadow-indigo-500/40"> ... </button>
    <button class="shadow shadow-blue-500/40 hover:shadow-indigo-500/40 xl:shadow-indigo-500/40"> ... </button>
    // preserving shadow color when changing the shadow size:
    <div class="shadow-lg shadow-red-500 md:shadow-xl md:shadow-red-500"> ... </div>
    // tailwind.config.js > theme.colors | theme.extend.colors | theme.boxShadowColor | theme.extend.boxShadowColor
  

Opacity


    opacity-{0|5|10|15|...|95|100} // opacity: 0|0.05|0.1|0.15|...|0.95|1;
    // usage:
    <div class="opacity-50 hover:opacity-100 xl:opacity-100"> ... </div>
  

Blend Mode


    // --- MIX BLEND MODE - how an element should blend with the background
    mix-blend-normal      // mix-blend-mode: normal;
    mix-blend-multiply    // mix-blend-mode: multiply;
    mix-blend-screen      // mix-blend-mode: screen;
    mix-blend-overlay     // mix-blend-mode: overlay;
    mix-blend-darken      // mix-blend-mode: darken;
    mix-blend-lighten     // mix-blend-mode: lighten;
    mix-blend-color-dodge // mix-blend-mode: color-dodge;
    mix-blend-color-burn  // mix-blend-mode: color-burn;
    mix-blend-hard-light  // mix-blend-mode: hard-light;
    mix-blend-soft-light  // mix-blend-mode: soft-light;
    mix-blend-difference  // mix-blend-mode: difference;
    mix-blend-exclusion   // mix-blend-mode: exclusion;
    mix-blend-hue         // mix-blend-mode: hue;
    mix-blend-saturation  // mix-blend-mode: saturation;
    mix-blend-color       // mix-blend-mode: color;
    mix-blend-luminosity  // mix-blend-mode: luminosity;
    mix-blend-plus-lighter // mix-blend-mode: plus-lighter;
    // usage:
    <div class="flex justify-center -space-x-14">
      <div class="mix-blend-multiply bg-blue-400"> ... </div>
      <div class="mix-blend-multiply bg-pink-400"> ... </div>
    </div>
    <div class="mix-blend-multiply hover:mix-blend-overlay xl:mix-blend-overlay"> ... </div>


    // --- BACKGROUND BLEND MODE - how an element background image should blend with its background color
    bg-blend-normal      // background-blend-mode: normal;
    bg-blend-multiply    // background-blend-mode: multiply;
    bg-blend-screen      // background-blend-mode: screen;
    bg-blend-overlay     // background-blend-mode: overlay;
    bg-blend-darken      // background-blend-mode: darken;
    bg-blend-lighten     // background-blend-mode: lighten;
    bg-blend-color-dodge // background-blend-mode: color-dodge;
    bg-blend-color-burn  // background-blend-mode: color-burn;
    bg-blend-hard-light  // background-blend-mode: hard-light;
    bg-blend-soft-light  // background-blend-mode: soft-light;
    bg-blend-difference  // background-blend-mode: difference;
    bg-blend-exclusion   // background-blend-mode: exclusion;
    bg-blend-hue         // background-blend-mode: hue;
    bg-blend-saturation  // background-blend-mode: saturation;
    bg-blend-color       // background-blend-mode: color;
    bg-blend-luminosity  // background-blend-mode: luminosity;
    // usage:
    <div class="bg-blend-lighten hover:bg-blend-darken xl:bg-blend-darken"> ... </div>
  

Filters


    // --- BLUR
    blur-{sm|md|lg|xl|2xl|3xl} // filter: blur(4|12|16|24|40|64px);
    blur      // filter: blur(8px);
    blur-none // filter: blur(0);
    // usage:
    <div class="blur hover:filter-none xl:blur-[2px]"> removing all filters on hover </div>
    // tailwind.config.js > theme.blur | theme.extend.blur


    // --- BRIGHTNESS
    brightness-{0|50|75|90|95|100|100|105|110|125|150|200} // filter: brightness(0|.5|.75|...|1.5|2);
    // usage:
    <div class="brightness-150 hover:filter-none xl:brightness-[1.75]"> ... </div>
    // tailwind.config.js > theme.brightness | theme.extend.brightness


    // --- CONTRAST
    contrast-{0|50|75|100|125|150|200} // filter: contrast(0|.5|.75|1|1.25|1.5|2);
    // usage:
    <div class="contrast-50 hover:filter-none xl:contrast-[.25]"> ... </div>
    // tailwind.config.js > theme.contrast | theme.extend.contrast


    // --- DROP SHADOW
    drop-shadow-{sm|md|lg|xl|2xl} // filter: drop-shadow( * );
    drop-shadow      // filter: drop-shadow(0 1px 2px rgb(0 0 0 / 0.1)) drop-shadow(0 1px 1px rgb(0 0 0 / 0.06));
    drop-shadow-none // filter: drop-shadow(0 0 #0000);
    // usage:
    <div class="drop-shadow hover:filter-none xl:drop-shadow-[0_35px_35px_rgba(0,0,0,0.25)]"> ... </div>
    // tailwind.config.js > theme.dropShadow | theme.extend.dropShadow


    // --- GRAYSCALE
    grayscale-0 // filter: grayscale(0);
    grayscale   // filter: grayscale(100%);
    // usage:
    <div class="grayscale hover:filter-none md:grayscale-[50%]"> ... </div>
    // tailwind.config.js > theme.grayscale | theme.extend.grayscale


    // --- HUE ROTATE
    hue-rotate-{0|15|30|60|90|180} // filter: hue-rotate(0|15|30|60|90|180deg);
    // usage:
    <div class="hue-rotate-30 hover:filter-none xl:hue-rotate-[270deg]"> ... </div>
    <div class="-hue-rotate-60"> negative hue-rotate value </div>
    // tailwind.config.js > theme.hueRotate | theme.extend.hueRotate


    // --- INVERT
    invert-0 // filter: invert(0);
    invert   // filter: invert(100%);
    // usage:
    <div class="invert hover:filter-none xl:invert-[.25]"> ... </div>
    // tailwind.config.js > theme.invert | theme.extend.invert


    // --- SATURATE
    saturate-{0|50|100|150|200} // filter: saturate(0|.5|1|1.5|2);
    // usage:
    <div class="saturate-150 hover:filter-none xl:saturate-[.25]"> ... </div>
    // tailwind.config.js > theme.saturate | theme.extend.saturate


    // --- SEPIA
    sepia-0 // filter: sepia(0);
    sepia   // filter: sepia(100%);
    // usage:
    <div class="sepia hover:filter-none xl:sepia-[.25]"> ... </div>
    // tailwind.config.js > theme.sepia | theme.extend.sepia


    // --- BACKDROP BLUR
    backdrop-blur-none // backdrop-filter: blur(0);
    backdrop-blur      // backdrop-filter: blur(8px);
    backdrop-blur-{sm|md|lg|xl|2xl|3xl} // backdrop-filter: blur(4|12|16|24|40|64px);
    // usage:
    <div class="backdrop-blur-sm hover:backdrop-filter-none xl:backdrop-blur-[2px]"> ... </div>
    // tailwind.config.js > theme.backdropBlur | theme.extend.backdropBlur


    // --- BACKDROP BRIGHTNESS
    backdrop-brightness-{0|50|75|90|95|100|105|110|125|150|200} // backdrop-filter: brightness(0|.5|.75|...|1.5|2);
    // usage:
    <div class="backdrop-blur-150 hover:backdrop-filter-none xl:backdrop-brightness-[.25]"> ... </div>
    // tailwind.config.js > theme.backdropBrightness | theme.extend.backdropBrightness


    // --- BACKDROP CONTRAST
    backdrop-contrast-{0|50|75|100|125|150|200} // backdrop-filter: contrast(0|.5|.75|1|1.25|1.5|2);
    // usage:
    <div class="backdrop-contrast-150 hover:backdrop-filter-none xl:backdrop-contrast-[.25]"> ... </div>
    // tailwind.config.js > theme.backdropContrast | theme.extend.backdropContrast


    // --- BACKDROP GRAYSCALE
    backdrop-grayscale-0 // backdrop-filter: grayscale(0);
    backdrop-grayscale   // backdrop-filter: grayscale(100%);
    // usage:
    <div class="backdrop-grayscale hover:backdrop-filter-none xl:backdrop-grayscale-[.5]"> ... </div>
    // tailwind.config.js > theme.backdropGrayscale | theme.extend.backdropGrayscale


    // --- BACKDROP HUE ROTATE
    backdrop-hue-rotate-{0|15|30|60|90|180} // backdrop-filter: hue-rotate(0|15|30|60|90|180deg);
    // usage:
    <div class="backdrop-hue-rotate-15 hover:backdrop-filter-none xl:backdrop-hue-rotate-[270deg]"> ... </div>
    <div class="-backdrop-hue-rotate-60"> negative hue-rotate value </div>
    // tailwind.config.js > theme.backdropHueRotate | theme.extend.backdropHueRotate


    // --- BACKDROP INVERT
    backdrop-invert-0 // backdrop-filter: invert(0);
    backdrop-invert   // backdrop-filter: invert(100%);
    // usage:
    <div class="backdrop-invert hover:backdrop-filter-none xl:backdrop-invert-[.25]"> ... </div>
    // tailwind.config.js > theme.backdropInvert | theme.extend.backdropInvert


    // --- BACKDROP OPACITY
    backdrop-opacity-{0|5|10|15|...|95|100} // backdrop-filter: opacity(0|0.05|0.1|0.15|...|0.95|1);
    // usage:
    <div class="backdrop-opacity-30 hover:backdrop-filter-none xl:backdrop-opacity-[.12]"> ... </div>
    // tailwind.config.js > theme.backdropOpacity | theme.extend.backdropOpacity


    // --- BACKDROP SATURATE
    backdrop-saturate-{0|50|100|150|200} //backdrop-filter: saturate(.5|1|1.5|2);
    // usage:
    <div class="backdrop-saturate-50 hover:backdrop-filter-none xl:backdrop-saturate-[.25]"> ... </div>
    // tailwind.config.js > theme.backdropSaturate | theme.extend.backdropSaturate


    // --- BACKDROP SEPIA
    backdrop-sepia-0 // backdrop-filter: sepia(0);
    backdrop-sepia   // backdrop-filter: sepia(100%);
    // usage:
    <div class="backdrop-sepia hover:backdrop-filter-none xl:backdrop-sepia-[.25]"> ... </div>
    // tailwind.config.js > theme.backdropSepia | theme.extend.backdropSepia
  

Tables


    // --- BORDER COLLAPSE -  whether table borders should collapse or be separated
    border-collapse // border-collapse: collapse; - combine adjacent cell borders into a single border when possible
    border-separate // border-collapse: separate; - force each cell to display its own separate borders
    // usage:
    <table class="border-collapse border border-slate-500 hover:border-collapse xl:border-collapse">
      <thead>
        <tr> <th class="border border-slate-600"> ... </th> <th class="border border-slate-600"> ... </th> </tr>
      </thead>
      <tbody>
        <tr>
          <td class="border border-slate-700"> ... </td> <td class="border border-slate-700"> ... </td>
        </tr>
      </tbody>
    </table>


    // --- BORDER SPACING - spacing between table borders
    border-spacing-x-{VALUE} // border-spacing: *px var(--tw-border-spacing-y);
    border-spacing-y-{VALUE} // border-spacing: var(--tw-border-spacing-x) *px;
    // values:
    0, px, 0.5, 1, ..., 96
    // usage:
    <table class="border-spacing-2 border border-slate-500 hover:border-spacing-2 xl:border-spacing-[7px]"> ... </table>
    // tailwind.config.js > theme.spacing | theme.extend.spacing | theme.borderSpacing | theme.extend.borderSpacing


    // --- TABLE LAYOUT
    table-auto  // table-layout: auto;
    table-fixed // table-layout: fixed;
    // usage:
    <table class="table-auto hover:table-fixed xl:table-fixed"> ... </table>


    // --- CAPTION SIDE - alignment of a caption element inside of a table
    caption-top    // caption-side: top;
    caption-bottom // caption-side: bottom;
    // usage:
    <table>
      <caption class="caption-top hover:caption-bottom xl:caption-bottom"> ... </caption>
      <thead>
        <tr> <th> ... </th> <th> ... </th> </tr>
      </thead>
      <tbody> ... </tbody>
    </table>
  

Transition


    // --- PROPERTY - controlling which CSS properties transition
    transition-none      // transition-property: none;
    transition-all       // transition-property: all; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 150ms;
    transition           // transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 150ms;
    transition-colors    // transition-property: color, background-color, border-color, text-decoration-color, fill, stroke; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 150ms;
    transition-opacity   // transition-property: opacity; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 150ms;
    transition-shadow    // transition-property: box-shadow; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 150ms;
    transition-transform // transition-property: transform; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 150ms;
    // usage:
    <button class="transition ease-in-out delay-150 bg-blue-500 hover:-translate-y-1 hover:scale-110 hover:bg-indigo-500 duration-300"> ... </button>
    <button class="transition transform hover:-translate-y-1 motion-reduce:transition-none motion-reduce:hover:transform-none"> ... </button>
    <div class="transition-[height] hover:transition-all xl:transition-all"> ... </div>
    // tailwind.config.js > theme.transitionProperty | theme.extend.transitionProperty


    // --- DURATION - duration of CSS transitions
    duration-0    // transition-duration: 0s;
    duration-75   // transition-duration: 75ms;
    duration-100  // transition-duration: 100ms;
    duration-150  // transition-duration: 150ms;
    duration-200  // transition-duration: 200ms;
    duration-300  // transition-duration: 300ms;
    duration-500  // transition-duration: 500ms;
    duration-700  // transition-duration: 700ms;
    duration-1000 // transition-duration: 1000ms;
    // usage:
    <button class="transition duration-700 ease-in-out"> ... </button>
    <div class="transition duration-[2000ms] hover:duration-150 xl:duration-150"> ... </div>
    // tailwind.config.js > theme.transitionDuration | theme.extend.transitionDuration


    // --- TIMING FUNCTION - easing of CSS transitions
    ease-linear // transition-timing-function: linear;
    ease-in     // transition-timing-function: cubic-bezier(0.4, 0, 1, 1);
    ease-out    // transition-timing-function: cubic-bezier(0, 0, 0.2, 1);
    ease-in-out // transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
    // usage:
    <button class="transition duration-150 ease-in-out hover:ease-in xl:ease-out"> ... </button>
    <div class="ease-[cubic-bezier(0.95,0.05,0.795,0.035)]"> ... </div>
    // tailwind.config.js > theme.transitionTimingFunction | theme.extend.transitionTimingFunction


    // --- DELAY - delay of CSS transitions
    delay-0    // transition-delay: 0s;
    delay-75   // transition-delay: 75ms;
    delay-100  // transition-delay: 100ms;
    delay-150  // transition-delay: 150ms;
    delay-200  // transition-delay: 200ms;
    delay-300  // transition-delay: 300ms;
    delay-500  // transition-delay: 500ms;
    delay-700  // transition-delay: 700ms;
    delay-1000 // transition-delay: 1000ms;
    // usage:
    <div class="transition duration-300 delay-150 hover:delay-300 xl:delay-[2000ms]"> ... </div>
    // tailwind.config.js > theme.transitionDelay | theme.extend.transitionDelay
  

Animations


    animate-none   // animation: none;

    animate-spin   // animation: spin 1s linear infinite;
                      @keyframes spin {
                        from {
                          transform: rotate(0deg);
                        }
                        to {
                          transform: rotate(360deg);
                        }
                      }

    animate-ping   // animation: ping 1s cubic-bezier(0, 0, 0.2, 1) infinite;
                      @keyframes ping {
                        75%, 100% {
                          transform: scale(2);
                          opacity: 0;
                        }
                      }

    animate-pulse  // animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
                      @keyframes pulse {
                        0%, 100% {
                          opacity: 1;
                        }
                        50% {
                          opacity: .5;
                        }
                      }

    animate-bounce // animation: bounce 1s infinite;
                      @keyframes bounce {
                        0%, 100% {
                          transform: translateY(-25%);
                          animation-timing-function: cubic-bezier(0.8, 0, 1, 1);button
                        }
                        50% {
                          transform: translateY(0);
                          animation-timing-function: cubic-bezier(0, 0, 0.2, 1);
                        }
                      }

    // usage:

    <button type="button" class="bg-indigo-500" disabled>
      <svg class="animate-spin h-5 w-5 mr-3" viewBox="0 0 24 24"> ... </svg>
      Processing...
    </button>

    <span class="animate-ping absolute inline-flex h-full w-full rounded-full bg-sky-400 opacity-75"> ... </span>

    <div class="animate-pulse flex space-x-4">
      <div class="rounded-full bg-slate-700 h-10 w-10"> ... </div>
      <div class="flex-1 space-y-6 py-1">
        <div class="h-2 bg-slate-700 rounded"> ... </div>
      </div>
    </div>

    <svg class="animate-bounce w-6 h-6"> ... </svg>

    <svg class="motion-safe:animate-spin h-5 w-5 mr-3" viewBox="0 0 24 24"> ... </svg>
    <div class="hover:animate-spin xl:animate-spin"> ... </div>

    // tailwind.config.js > theme.animation | theme.extend.animation
    module.exports = {
      theme: {
        extend: {
          animation: {
            'spin-slow': 'spin 3s linear infinite',
          }
    } } }
    // tailwind.config.js > theme.keyframes | theme.extend.keyframes
    module.exports = {
      theme: {
        extend: {
          keyframes: {
            wiggle: {
              '0%, 100%': { transform: 'rotate(-3deg)' },
              '50%': { transform: 'rotate(3deg)' },
            }
    } } } }
    // tailwind.config.js > theme.animation.[keyframe_name] | theme.extend.animation.[keyframe_name]
    module.exports = {
      theme: {
        extend: {
          animation: {
            wiggle: 'wiggle 1s ease-in-out infinite', // reference keyframes by name
          }
    } } }
  

Transform


    // --- Scale - scaling elements with transform
    scale-{0|50|75|90|95|100|105|110|125|150} // transform: scale(0|.5|.75|.9|.95|1|1.05|1.1|1.25|1.5);
    scale-x-{0|...|150} // transform: scaleX(0|...|1.5);
    scale-y-{0|...|150} // transform: scaleY(0|...|1.5);
    // usage:
    <img class="scale-75 hover:transform-none xl:scale-[1.7]" />
    <img class="-scale-50 hover:transform-none" />
    // tailwind.config.js > theme.scale | theme.extend.scale


    // --- ROTATE
    rotate-{0|1|2|3|6|12|45|90|180}   // transform: rotate(0|1|2|3|6|12|45|90|180deg);
    // usage:
    <div class="rotate-45 translate-x-4 skew-y-3 hover:transform-none xl:rotate-[17deg]"> ... </div>
    <img class="-rotate-45 hover:transform-none" />
    // tailwind.config.js > theme.rotate | theme.extend.rotate
    module.exports = {
      theme: {
        extend: {
          rotate: {
            '17': '17deg',
          }
    } } }


    // --- TRANSLATE
    translate-x-{VALUE} // transform: translateX(*);
    translate-y-{VALUE} // transform: translateY(*);
    // values:
    0, px, 0.5, 1, ..., 96
    full, 1/2, 1/3, 2/3, 1/4, 2/4, 3/4
    // usage:
    <div class="scale-75 translate-x-4 skew-y-3 hover:transform-none xl:translate-y-[17rem]"> ... </div>
    <img class="-translate-y-6 hover:transform-none" />
    // tailwind.config.js > theme.spacing | theme.extend.spacing
    module.exports = {
      theme: {
        extend: {
          spacing: {
            '4.25': '17rem',
          }
    } } }


    // --- SKEW
    skew-x-{0|1|2|3|6|12} // transform: skewX(0|1|2|3|6|12deg);
    skew-y-{0|1|2|3|6|12} // transform: skewY(0|1|2|3|6|12deg);
    // usage:
    <div class="scale-75 translate-x-4 skew-y-3 hover:transform-none xl:skew-y-[17deg]"> ... </div>
    <img class="-skew-y-6 md:transform-none" />
    // tailwind.config.js > theme.skew | theme.extend.skew
    module.exports = {
      theme: {
        extend: {
          skew: {
            '17': '17deg',
          }
    } } }


    // --- TRANSFORM ORIGIN - element transformation origin
    origin-center       // transform-origin: center;
    origin-top          // transform-origin: top;
    origin-top-right    // transform-origin: top right;
    origin-right        // transform-origin: right;
    origin-bottom-right // transform-origin: bottom right;
    origin-bottom       // transform-origin: bottom;
    origin-bottom-left  // transform-origin: bottom left;
    origin-left         // transform-origin: left;
    origin-top-left     // transform-origin: top left;
    // usage:
    <img class="origin-top rotate-45 origin-center hover:transform-none xl:origin-[33%_75%]" />
    <img class="origin-bottom-right -rotate-12 hover:transform-none" />
    // tailwind.config.js > theme.transformOrigin | theme.extend.transformOrigin
    module.exports = {
      theme: {
        extend: {
          transformOrigin: {
            'top-left-1/3-3/4': '33% 75%',
          }
    } } }


    // GPU/CPU rendering, hardware acceleration:
    <div class="scale-150 translate-y-6 transform-gpu md:transform-cpu"> ... </div>
  

Form


    // --- ACCENT COLOR - accent-color
    accent-{inherit|current|transparent|black|white|auto}
    accent-{COLOR}-{50|100|200|...|900|950}
    // colors:
    // gray, slate, zinc, neutral, stone,
    // red, orange, amber, yellow, lime, green, emerald, teal,
    // cyan, sky, blue, indigo, violet, purple, fuchsia, pink, rose
    // usage:
    <label>
      <input type="checkbox" class="accent-pink-100 focus:accent-pink-500 xl:accent-[#50d71e]" checked /> Customized
    </label>
    <label>
      <input type="checkbox" class="accent-emerald-500/25" /> with opacity
    </label>
    // browsers automatically adjust the brightness of the accent color for 'hover' and 'active' states.
    // tailwind.config.js > theme.colors | theme.extend.colors | theme.accentColor | theme.extend.accentColor


    // --- APPEARANCE - suppressing native form control styling
    appearance-none // appearance: none; - reset any browser specific styling on an element
    appearance-auto // appearance: auto; - restore the default browser specific styling
    // usage:
    <select class="appearance-none sm:appearance-auto row-start-1 col-start-1 bg-slate-50 dark:bg-slate-800 ...">
      <option>Yes</option> <option>No</option> <option>Maybe</option>
    </select>
    // reverting to the standard browser controls in certain accessibility modes
    <label>
      <div>
        <input type="checkbox" class="appearance-auto hover:appearance-none forced-colors:appearance-auto" />
        <svg class="invisible peer-checked:visible forced-colors:hidden" > ... </svg>
      </div>
      Falls back to default appearance
    </label>
    <label>
      <div>
        <input type="checkbox" class="appearance-none" />
        <svg class="invisible peer-checked:visible"> ... </svg>
      </div>
      Keeps custom appearance
    </label>
  

Scroll


    // --- SCROLL BEHAVIOR
    scroll-auto // scroll-behavior: auto;
    scroll-smooth // scroll-behavior: smooth;
    // usage:
    <html class="scroll-smooth focus:scroll-auto xl:scroll-auto"> ... </html>


    // --- SCROLL MARGIN - scroll offset around items in a snap container
    scroll-{MARGIN}-{VALUE} // scroll-margin-*
    // margin:
    m   // margin
    mx  // margin-left + margin-right
    my  // margin-top + margin-bottom
    ms  // margin-inline-start - map to the left or right side based on the text direction (rtl, ltr)
    me  // margin-inline-end   - map to the left or right side based on the text direction (rtl, ltr)
    mt  // margin-top
    mr  // margin-right
    mb  // margin-bottom
    ml  // margin-left
    // values:
    0, px, 0.5, 1, ..., 96
    // usage:
    <div class="snap-x">
      <div class="scroll-ml-6 snap-start"> <img src="..." /> </div>
      <div class="scroll-ml-6 snap-start"> <img src="..." /> </div>
    </div>
    <div class="-scroll-ml-6 snap-start ..."> negative scroll margin value </div>
    <div class="scroll-m-8 hover:scroll-m-0 xl:scroll-m-[24rem]"> ... </div>
    // tailwind.config.js > heme.spacing | theme.extend.spacing | theme.scrollMargin | theme.extend.scrollMargin


    // --- SCROLL PADDING - scroll offset within a snap container
    scroll-{PADDING}-{VALUE} // scroll-padding-*
    // padding:
    p-{VALUE}   // padding
    px-{VALUE}  // padding-left + padding-right
    py-{VALUE}  // padding-top + padding-bottom
    ps-{VALUE}  // padding-inline-start - map to the left or right side based on the text direction (rtl, ltr)
    pe-{VALUE}  // padding-inline-end   - map to the left or right side based on the text direction (rtl, ltr)
    pt-{VALUE}  // padding-top
    pr-{VALUE}  // padding-right
    pb-{VALUE}  // padding-bottom
    pl-{VALUE}  // padding-left
    // values:
    0, px, 0.5, 1, ..., 96
    // usage:
    <div class="snap-x">
      <div class="scroll-pl-6 snap-start"> <img src="..." /> </div>
      <div class="scroll-pl-6 snap-start"> <img src="..." /> </div>
    </div>
    <div class="scroll-p-8 hover:scroll-p-0 xl:scroll-p-[24rem]"> ... </div>
    // tailwind.config.js > theme.spacing | theme.extend.spacing | theme.scrollPadding | theme.extend.scrollPadding


    // --- SCROLL SNAP ALIGN - snap an element when being scrolled inside a snap container
    snap-start      // scroll-snap-align: start;
    snap-end        // scroll-snap-align: end;
    snap-center     // scroll-snap-align: center;
    snap-align-none // scroll-snap-align: none;
    // usage:
    <div class="snap-x">
      <div class="snap-start"> <img src="..." /> </div>
      <div class="snap-start"> <img src="..." /> </div>
    </div>
    <div class="snap-center hover:snap-start xl:snap-start"> ... </div>


    // --- SCROLL SNAP STOP - whether past possible snap positions can be skipped
    snap-normal // scroll-snap-stop: normal;
    snap-always // scroll-snap-stop: always; - force a snap container to always stop on an element before the user can continue scrolling to the next item
    // usage:
    <div class="snap-x snap-mandatory">
      <div class="snap-always snap-center"> <img src="..." /> </div>
      <div class="snap-always snap-center"> <img src="..." /> </div>
    </div>
    <div class="snap-always hover:snap-normal xl:snap-normal"> ... </div>


    // --- SCROLL SNAP TYPE - how strictly snap points are enforced in a snap container
    snap-none      // scroll-snap-type: none;
    snap-x         // scroll-snap-type: x var(--tw-scroll-snap-strictness);
    snap-y         // scroll-snap-type: y var(--tw-scroll-snap-strictness);
    snap-both      // scroll-snap-type: both var(--tw-scroll-snap-strictness);
    snap-mandatory // --tw-scroll-snap-strictness: mandatory;
    snap-proximity // --tw-scroll-snap-strictness: proximity; - browser default
    // usage:
    <div class="snap-x">
      <div class="snap-center"> <img src="..." /> </div>
      <div class="snap-center"> <img src="..." /> </div>
    </div>
    <div class="snap-both hover:snap-x xl:snap-x"> ... </div>
  

Interactivity


    // --- POINTER EVENTS - whether an element responds to pointer events
    pointer-events-none // pointer-events: none; - ignore pointer events, still trigger on child elements
    pointer-events-auto // pointer-events: auto; - revert to the default browser behavior (':hover', 'click',...)
    // usage:
    <div class="pointer-events-none focus:pointer-events-auto xl:pointer-events-auto"> ... </div>


    // --- USER SELECT - whether the user can select text in an element
    select-none // user-select: none; - prevent selecting text
    select-text // user-select: text; - allow selecting text
    select-all  // user-select: all;  - automatically select all the text in an element when a user clicks
    select-auto // user-select: auto; - browsers default, undo other classes like select-none at different breakpoints
    // usage:
    <div class="select-none hover:select-all xl:select-all"> ... </div>


    // --- RESIZE - how an element can be resized
    resize-none // resize: none;
    resize-y    // resize: vertical;
    resize-x    // resize: horizontal;
    resize      // resize: both;
    // usage:
    <div class="resize-none hover:resize xl:resize"> ... </div>


    // --- TOUCH ACTION - how an element can be scrolled and zoomed on touchscreens
    touch-auto       // touch-action: auto;
    touch-none       // touch-action: none;
    touch-pan-x      // touch-action: pan-x;
    touch-pan-left   // touch-action: pan-left;
    touch-pan-right  // touch-action: pan-right;
    touch-pan-y      // touch-action: pan-y;
    touch-pan-up     // touch-action: pan-up;
    touch-pan-down   // touch-action: pan-down;
    touch-pinch-zoom // touch-action: pinch-zoom;
    touch-manipulation // touch-action: manipulation;
    // usage:
    <div class="w-full h-48 overflow-auto touch-auto focus:touch-pan-x xl:touch-pan-y">
      <img class="w-[150%] max-w-none h-auto" src="..." />
    </div>


    // --- CARET COLOR - color of the text input cursor, caret-color
    caret-{inherit|current|transparent|black|white}
    caret-{COLOR}-{50|100|200|...|900|950}
    // colors:
    // gray, slate, zinc, neutral, stone,
    // red, orange, amber, yellow, lime, green, emerald, teal,
    // cyan, sky, blue, indigo, violet, purple, fuchsia, pink, rose
    // usage:
    <textarea class="caret-blue-500 focus:caret-indigo-500 xl:caret-[#50d71e]"></textarea>
    // tailwind.config.js > theme.colors | theme.extend.colors | theme.caretColor | theme.extend.caretColor


    // --- CURSOR - cursor style when hovering over an element
    cursor-auto        // cursor: auto;
    cursor-default     // cursor: default;
    cursor-pointer     // cursor: pointer;
    cursor-wait        // cursor: wait;
    cursor-text        // cursor: text;
    cursor-move        // cursor: move;
    cursor-help        // cursor: help;
    cursor-not-allowed // cursor: not-allowed;
    cursor-none        // cursor: none;
    cursor-context-menu // cursor: context-menu;
    cursor-progress    // cursor: progress;
    cursor-cell        // cursor: cell;
    cursor-crosshair   // cursor: crosshair;
    cursor-vertical-text // cursor: vertical-text;
    cursor-alias       // cursor: alias;
    cursor-copy        // cursor: copy;
    cursor-no-drop     // cursor: no-drop;
    cursor-grab        // cursor: grab;
    cursor-grabbing    // cursor: grabbing;
    cursor-all-scroll  // cursor: all-scroll;
    cursor-col-resize  // cursor: col-resize;
    cursor-row-resize  // cursor: row-resize;
    cursor-n-resize    // cursor: n-resize;
    cursor-e-resize    // cursor: e-resize;
    cursor-s-resize    // cursor: s-resize;
    cursor-w-resize    // cursor: w-resize;
    cursor-ne-resize   // cursor: ne-resize;
    cursor-nw-resize   // cursor: nw-resize;
    cursor-se-resize   // cursor: se-resize;
    cursor-sw-resize   // cursor: sw-rcaret-coloresize;
    cursor-ew-resize   // cursor: ew-resize;
    cursor-ns-resize   // cursor: ns-resize;
    cursor-nesw-resize // cursor: nesw-resize;
    cursor-nwse-resize // cursor: nwse-resize;
    cursor-zoom-in     // cursor: zoom-in;
    cursor-zoom-out    // cursor: zoom-out;
    // usage:
    <button type="button" class="cursor-pointer"> Submit </button>
    <button type="button" class="cursor-progress"> Saving... </button>
    <button type="button" disabled class="cursor-not-allowed"> Confirm </button>
    <div class="cursor-not-allowed focus:cursor-auto xl:cursor-auto"> ... </div>
    <div class="cursor-[url(hand.cur),_pointer]"> arbitrary value </div>
    // tailwind.config.js > theme.cursor | theme.extend.cursor


    // --- WILL CHANGE - optimize upcoming animations of elements that are expected to change
    // instructing the browser to prepare the necessary animation before it actually begins
    will-change-auto      // will-change: auto;
    will-change-scroll    // will-change: scroll-position;
    will-change-contents  // will-change: contents;
    will-change-transform // will-change: transform;
    // usage:
    <div class="will-change-auto hover:will-change-scroll xl:will-change-[top,left]"> ... </div>
    // apply these utilities just before an element changes, and then remove it shortly after it finishes using 'will-change-auto'
    // avoid using these utilities too much, or simply in anticipation of performance issues
    // as it could actually cause the page to be less performant.
    // tailwind.config.js > theme.willChange | theme.extend.willChange
    module.exports = {
      theme: {
        extend: {
          willChange: {
            'left-top': 'left, top',
          }
    } } }
  

SVG


    // --- FILL - fill:*
    fill-{inherit|current|transparent|black|white|none}
    fill-{COLOR}-{50|100|200|...|900|950}
    // colors:
    // gray, slate, zinc, neutral, stone,
    // red, orange, amber, yellow, lime, green, emerald, teal,
    // cyan, sky, blue, indigo, violet, purple, fuchsia, pink, rose
    // usage:
    <svg class="fill-blue-500 hover:fill-cyan-700 xl:fill-[#243c5a]"> ... </svg>
    // tailwind.config.js > theme.colors | theme.extend.colors | theme.fill | theme.extend.fill


    // --- STROKE - stroke:*
    stroke-{inherit|current|transparent|black|white|none}
    stroke-{COLOR}-{50|100|200|...|900|950}
    // usage:
    <svg class="stroke-cyan-500 hover:stroke-cyan-700 hover:stroke-[#243c5a]"> ... </svg>
    // tailwind.config.js > theme.colors | theme.extend.colors | theme.stroke | theme.extend.stroke


    // --- STROKE WIDTH
    stroke-0 // stroke-width: 0;
    stroke-1 // stroke-width: 1;
    stroke-2 // stroke-width: 2;
    // usage:
    <svg class="stroke-1 hover:stroke-2 xl:stroke-[5px]"> ... </svg>
    // tailwind.config.js > theme.strokeWidth | theme.extend.strokeWidth
  

Accessibility


    // --- SCREEN READERS - improving accessibility with screen readers
    sr-only //  hide an element visually without hiding it from screen readers.
      // position: absolute;
      // width: 1px;
      // height: 1px;
      // padding: 0;
      // margin: -1px;
      // overflow: hidden;
      // clip: rect(0, 0, 0, 0);
      // white-space: nowrap;
      // border-width: 0;
    not-sr-only // undo sr-only, make an element visible to sighted users as well as screen readers.
      // position: static;
      // width: auto;
      // height: auto;
      // padding: 0;
      // margin: 0;
      // overflow: visible;
      // clip: auto;
      // white-space: normal;
    // usage:
    <a href="#"> <svg> ... </svg> <span class="sr-only"> Settings </span> </a>
    <a href="#content" class="sr-only focus:not-sr-only xl:not-sr-only"> Skip to content </a>


    // --- FORCED COLOR ADJUST - opting in and out of forced colors
    forced-color-adjust-auto // forced-color-adjust: auto;
    forced-color-adjust-none // forced-color-adjust: none; - opt an element out the colors enforced by forced colors mode
    // usage:
    <a href="#content" class="forced-color-adjust-none focus:forced-color-adjust-auto xl:forced-color-adjust-auto">
      Skip to content
    </a>
    // opt an element out the colors enforced by forced colors mode
    // useful in situations where enforcing a limited color palette will degrade usability:
    <form>
      <img src="..." />
      <div>
        <h3> Basic Tee - $35 </h3>
        <fieldset>
          <legend class="sr-only"> Choose a color </legend>
          <div class="forced-color-adjust-none ...">
            <label >
              <input class="sr-only" type="radio" name="color-choice" value="White" />
              <span class="sr-only"> White </span>
              <span class="size-6 rounded-full border border-black border-opacity-10 bg-white"> ... </span>
            </label>
            ...
          </div>
        </fieldset>
    </form>
    // undo forced-color-adjust-none, making an element adhere to colors enforced by forced colors mode:
    <form>
      <fieldset class="forced-color-adjust-none lg:forced-color-adjust-auto ...">
        <legend> Choose a color: </legend>
        <select class="hidden lg:block">
          <option value="White"> White </option>
          <option value="Gray"> Gray </option>
          <option value="Black"> Black </option>
        </select>
        <div class="lg:hidden">
          <label>
            <input class="sr-only" type="radio" name="color-choice" value="White" />
            ...
          </label>
          ...
        </div>
      </fieldset>
    </form>
  

Plugins

CORE PLUGINS REFERENCE

    accentColor - accent-color utilities ( accent-green-800, ... )
    accessibility - sr-only and not-sr-only utilities, ... )
    alignContent - align-content utilities ( content-between, ... )
    alignItems - align-items utilities ( items-center, ... )
    alignSelf - align-self utilities ( self-end, ... )
    animation - animation utilities ( animate-ping, ... )
    appearance - appearance utilities ( appearance-none, ... )
    aspectRatio - aspect-ratio utilities ( aspect-square, ... )
    backdropBlur - backdrop-blur utilities ( backdrop-blur-md, ... )
    backdropBrightness - backdrop-brightness utilities ( backdrop-brightness-100, ... )
    backdropContrast - backdrop-contrast utilities ( backdrop-contrast-100, ... )
    backdropFilter - backdrop-filter utilities ( backdrop-filter, ... )
    backdropGrayscale - backdrop-grayscale utilities ( backdrop-grayscale-0, ... )
    backdropHueRotate - backdrop-hue-rotate utilities ( backdrop-hue-rotate-30, ... )
    backdropInvert - backdrop-invert utilities ( backdrop-invert-0, ... )
    backdropOpacity - backdrop-opacity utilities ( backdrop-opacity-50, ... )
    backdropSaturate - backdrop-saturate utilities ( backdrop-saturate-100, ... )
    backdropSepia - backdrop-sepia utilities ( backdrop-sepia-0, ... )
    backgroundAttachment - background-attachment utilities ( bg-local, ... )
    backgroundBlendMode - background-blend-mode utilities ( bg-blend-color-burn, ... )
    backgroundClip - background-clip utilities ( bg-clip-padding, ... )
    backgroundColor - background-color utilities ( bg-green-800, ... )
    backgroundImage - background-image utilities ( bg-gradient-to-br, ... )
    backgroundOpacity - background-color opacity utilities ( bg-opacity-25, ... )
    backgroundOrigin - background-origin utilities ( bg-origin-padding, ... )
    backgroundPosition - background-position utilities ( bg-left-top, ... )
    backgroundRepeat - background-repeat utilities ( bg-repeat-x, ... )>
    backgroundSize - background-size utilities ( bg-cover, ... )
    blur - blur utilities ( blur-md, ... )
    borderCollapse - border-collapse utilities ( border-collapse, ... )
    borderColor - border-color utilities ( border-e-green-800, ... )
    borderOpacity - border-color opacity utilities ( border-opacity-25, ... )
    borderRadius - border-radius utilities ( rounded-ss-lg, ... )
    borderSpacing - border-spacing utilities ( border-spacing-x-28, ... )
    borderStyle - border-style utilities ( border-dotted, ... )
    borderWidth - border-width utilities ( border-e-4, ... )
    boxDecorationBreak - box-decoration-break utilities ( decoration-clone, ... )
    boxShadow - box-shadow utilities ( shadow-lg, ... )
    boxShadowColor - box-shadow-color utilities ( shadow-green-800, ... )
    boxSizing - box-sizing utilities ( box-border, ... )
    breakAfter - break-after utilities ( break-after-avoid-page, ... )
    breakBefore - break-before utilities ( break-before-avoid-page, ... )
    breakInside - break-inside utilities ( break-inside-avoid, ... )
    brightness - brightness utilities ( brightness-100, ... )
    captionSide - caption-side utilities ( caption-top, ... )
    caretColor - caret-color utilities ( caret-green-800, ... )
    clear - clear utilities ( clear-left, ... )
    columns - columns utilities ( columns-auto, ... )
    container - container component, ... )
    content - content utilities ( content-none, ... )
    contrast - contrast utilities ( contrast-100, ... )
    cursor - cursor utilities ( cursor-grab, ... )
    display - display utilities ( table-column-group, ... )
    divideColor - between elements border-color utilities ( divide-slate-500, ... )
    divideOpacity - divide-opacity utilities ( divide-opacity-50, ... )
    divideStyle - divide-style utilities ( divide-dotted, ... )
    divideWidth - between elements border-width utilities ( divide-x-2, ... )
    dropShadow - drop-shadow utilities ( drop-shadow-lg, ... )
    fill - fill utilities ( fill-green-700, ... )
    filter - filter utilities ( filter, ... )
    flex - flex utilities ( flex-auto, ... )
    flexBasis - flex-basis utilities ( basis-px, ... )
    flexDirection - flex-direction utilities ( flex-row-reverse, ... )
    flexGrow - flex-grow utilities ( flex-grow, ... )
    flexShrink - flex-shrink utilities ( flex-shrink, ... )
    flexWrap - flex-wrap utilities ( flex-wrap-reverse, ... )
    float - float utilities ( float-right, ... )
    fontFamily - font-family utilities ( font-serif, ... )
    fontSize - font-size utilities ( text-3xl, ... )
    fontSmoothing - font-smoothing utilities ( antialiased, ... )
    fontStyle - font-style utilities ( italic, ... )
    fontVariantNumeric - font-variant-numeric utilities ( oldstyle-nums, ... )
    fontWeight - font-weight utilities ( font-medium, ... )
    forcedColorAdjust - forced-color-adjust utilities ( forced-color-adjust-auto, ... )
    gap - gap utilities ( gap-x-28, ... )
    gradientColorStops - gradient-color-stops utilities ( via-emerald-700, ... )
    grayscale - grayscale utilities ( grayscale-0, ... )
    gridAutoColumns - grid-auto-columns utilities ( auto-cols-min, ... )
    gridAutoFlow - grid-auto-flow utilities ( grid-flow-dense, ... )
    gridAutoRows - grid-auto-rows utilities ( auto-rows-min, ... )
    gridColumn - grid-column utilities ( col-span-6, ... )
    gridColumnEnd - grid-column-end utilities ( col-end-7, ... )
    gridColumnStart - grid-column-start utilities ( col-start-7, ... )
    gridRow - grid-row utilities ( row-span-6, ... )
    gridRowEnd - grid-row-end utilities ( row-end-7, ... )
    gridRowStart - grid-row-start utilities ( row-start-7, ... )
    gridTemplateColumns - grid-template-columns utilities ( grid-cols-7, ... )
    gridTemplateRows - grid-template-rows utilities ( grid-rows-7, ... )
    height - height utilities ( h-96, ... )
    hueRotate - hue-rotate utilities ( hue-rotate-30, ... )
    hyphens - hyphens utilities ( hyphens-manual, ... )
    inset - inset utilities ( end-44, ... )
    invert - invert utilities ( invert-0, ... )
    isolation - isolation utilities ( isolate, ... )
    justifyContent - justify-content utilities ( justify-center, ... )
    justifyItems - justify-items utilities ( justify-items-end, ... )
    justifySelf - justify-self utilities ( justify-self-end, ... )
    letterSpacing - letter-spacing utilities ( tracking-normal, ... )
    lineClamp - line-clamp utilities ( line-clamp-4, ... )
    lineHeight - line-height utilities ( leading-9, ... )
    listStyleImage - list-style-image utilities ( list-image-none, ... )
    listStylePosition - list-style-position utilities ( list-inside, ... )
    listStyleType - list-style-type utilities ( list-disc, ... )
    margin - margin utilities ( me-28, ... )
    maxHeight - max-height utilities ( max-h-44, ... )
    maxWidth - max-width utilities ( max-w-80, ... )
    minHeight - min-height utilities ( min-h-44, ... )
    minWidth - min-width utilities ( min-w-36, ... )
    mixBlendMode - mix-blend-mode utilities ( mix-blend-hard-light, ... )
    objectFit - object-fit utilities ( object-fill, ... )
    objectPosition - object-position utilities ( object-left-top, ... )
    opacity - opacity utilities ( opacity-50, ... )
    order - order utilities ( order-8, ... )
    outlineColor - outline-color utilities ( outline-green-800, ... )
    outlineOffset - outline-offset utilities ( outline-offset-2, ... )
    outlineStyle - outline-style utilities ( outline-dashed, ... )
    outlineWidth - outline-width utilities ( outline-2, ... )
    overflow - overflow utilities ( overflow-x-hidden, ... )
    overscrollBehavior - overscroll-behavior utilities ( overscroll-y-contain, ... )
    padding - padding utilities ( pe-28, ... )
    placeContent - place-content utilities ( place-content-between, ... )
    placeItems - place-items utilities ( place-items-center, ... )
    placeSelf - place-self utilities ( place-self-end, ... )
    placeholderColor - placeholder color utilities ( placeholder-red-600, ... )
    placeholderOpacity - placeholder color opacity utilities ( placeholder-opacity-25, ... )
    pointerEvents - pointer-events utilities ( pointer-events-none, ... )
    position - position utilities ( absolute, ... )
    preflight Tailwind base/reset styles, ... )
    resize - resize utilities ( resize-y, ... )
    ringColor - ring-color utilities ( ring-green-800, ... )
    ringOffsetColor - ring-offset-color utilities ( ring-offset-green-800, ... )
    ringOffsetWidth - ring-offset-width utilities ( ring-offset-2, ... )
    ringOpacity - ring-opacity utilities ( ring-opacity-50, ... )
    ringWidth - ring-width utilities ( ring-4, ... )
    rotate - rotate utilities ( rotate-6, ... )
    saturate - saturate utilities ( saturate-100, ... )
    scale - scale utilities ( scale-x-95, ... )
    scrollBehavior - scroll-behavior utilities ( scroll-auto, ... )
    scrollMargin - scroll-margin utilities ( scroll-me-28, ... )
    scrollPadding - scroll-padding utilities ( scroll-pe-28, ... )
    scrollSnapAlign - scroll-snap-align utilities ( snap-end, ... )
    scrollSnapStop - scroll-snap-stop utilities ( snap-normal, ... )
    scrollSnapType - scroll-snap-type utilities ( snap-y, ... )
    sepia - sepia utilities ( sepia-0, ... )
    size - size utilities ( size-0.5, ... )
    skew - skew utilities ( skew-x-12, ... )
    space - "space-between" utilities ( space-x-4, ... )
    stroke - stroke utilities ( stroke-green-700, ... )
    strokeWidth - stroke-width utilities ( stroke-1, ... )
    tableLayout - table-layout utilities ( table-auto, ... )
    textAlign - text-align utilities ( text-right, ... )
    textColor - text-color utilities ( text-green-800, ... )
    textDecoration - text-decoration utilities ( overline, ... )
    textDecorationColor - text-decoration-color utilities ( decoration-green-800, ... )
    textDecorationStyle - text-decoration-style utilities ( decoration-dotted, ... )
    textDecorationThickness - text-decoration-thickness utilities ( decoration-4, ... )
    textIndent - text-indent utilities ( indent-28, ... )
    textOpacity - text-opacity utilities ( text-opacity-50, ... )
    textOverflow - text-overflow utilities ( overflow-ellipsis, ... )
    textTransform - text-transform utilities ( lowercase, ... )
    textUnderlineOffset - text-underline-offset utilities ( underline-offset-2, ... )
    textWrap - text-wrap utilities ( text-nowrap, ... )
    touchAction - touch-action utilities ( touch-pan-right, ... )
    transform - transform utility (for enabling transform features), ... )
    transformOrigin - transform-origin utilities ( origin-bottom-right, ... )
    transitionDelay - transition-delay utilities ( delay-200, ... )
    transitionDuration - transition-duration utilities ( duration-200, ... )
    transitionProperty - transition-property utilities ( transition-colors, ... )
    transitionTimingFunction - transition-timing-function utilities ( ease-in, ... )
    translate - translate utilities ( translate-x-full, ... )
    userSelect - user-select utilities ( select-text, ... )
    verticalAlign - vertical-align utilities ( align-bottom, ... )
    visibility - visibility utilities ( invisible, ... )
    whitespace - whitespace utilities ( whitespace-pre, ... )
    width - width utilities ( w-2.5, ... )
    willChange - will-change utilities ( will-change-scroll, ... )
    wordBreak - word-break utilities ( break-words, ... )
    zIndex - z-index utilities ( z-30, ... )
  
CUSTOM PLUGINS

    // --- tailwind.config.js :
    const plugin = require('tailwindcss/plugin')

    module.exports = {
      plugins: [
        plugin(function({  // helper functions:
          addUtilities,    // registering new static utility styles
          matchUtilities,  // registering new dynamic utility styles
          addComponents,   // registering new static component styles
          matchComponents, // registering new dynamic component styles
          addBase,         // registering new base styles
          addVariant,      // registering custom static variants
          matchVariant,    // registering custom dynamic variants
          theme,           // looking up values in the theme configuration
          config,          // looking up values in the Tailwind configuration
          corePlugins,     // checking if a core plugin is enabled
          e, // manually escaping strings meant to be used in class names
         }) {

          // --- static utilities that dont support user-provided values: class="content-auto"
          // can automatically be used with modifiers ( 'lg:content-auto' )
          addUtilities({ '.content-auto': { 'content-visibility': 'auto' } });
          // --- register utilities that map to values defined in the 'theme' config
          // and arbitrary values: class="tab-[13]"
          matchUtilities(
            { tab: (value) => ({ tabSize: value }) },
            { values: theme('tabSize') } // default values, classes that plugin generates: tab-1, ..., tab-8
          );

          // --- register new styles in 'components' layer, add more opinionated, complex classes,
          // that might need to be overridden with utility classes, and can be used with modifiers.
          addComponents({
            '.btn': {
              padding: '.5rem 1rem',
              borderRadius: '.25rem', // camelCase property name
              'font-weight': '600',   // dash-case property name
            },
            '.btn-red': {
              color: '#fff',
              backgroundColor: '#e3342f',
              fontWeight: '600 !important', // with 'important'
              '&:hover': {                  // nesting is supported
                backgroundColor: '#cc1f1a'
              },
              {
                '@media (min-width: 500px)': {
                  // ...
                }
              },
            },
          })

          // --- register new styles 'base' layer:
          // base typography styles, opinionated global resets, or @font-face rules
          addBase({
            'h1': { fontSize: theme('fontSize.2xl') },\
            'h2': { fontSize: theme('fontSize.xl') },
            'h3': { fontSize: theme('fontSize.lg') },
          })

          // --- register own custom modifiers, static:
          addVariant('inverted-colors', '@media (inverted-colors: inverted)') // class="flex inverted-colors:outline"
          addVariant('optional', '&:optional') // class="optional:border-gray-300"
          addVariant('hocus', ['&:hover', '&:focus']) // class="bg-blue-500 hocus:bg-blue-600"
          // dynamic, parameterized variants:
          matchVariant(
            'nth',
            (value) => (`&:nth-child(${value})`),
            { values: { 1: '1', 2: '2', 3: '3' } }
          );
          // also supports arbitrary values ( class="nth-[3n+1]:bg-blue-500" )
          // control the source order of the generated CSS:
          matchVariant("min", (value) => `@media (min-width: ${value})`, {
            sort(a, z) { return parseInt(a.value) - parseInt(z.value); },
          });
          // to support the group-* and peer-* versions of own custom modifiers,
          // register variants as separate using the special :merge directive
          // to ensure the .group and .peer classes only appear once in the final selector
          addVariant('optional', '&:optional')
          addVariant('group-optional', ':merge(.group):optional &')
          addVariant('peer-optional', ':merge(.peer):optional ~ &')

        }),
      ],
      theme: {
        tabSize: {
          1: '1',
          2: '2',
          4: '4',
          8: '8',
        }
      },
    }

    // --- official plugins ( 'Plugins' > 'OFFICIAL PLUGINS' section )
    module.exports = {
      // ...
      plugins: [
        // set of 'prose' classes:
        require('@tailwindcss/typography'), //
        // opinionated form reset layer:
        require('@tailwindcss/forms'),
        // alternative to native aspect-ratio, and adds aspect-w-{n} and aspect-h-{n} :
        require('@tailwindcss/aspect-ratio'),
        // add new @{size} variants (like @sm and @md)
        // style an element based on the dimensions of a parent marked with @container:
        require('@tailwindcss/container-queries'),
      ]
    }

    // --- EXPOSING OPTIONS
    // configurable plugins, invoked with a config object.
    // each argument should be a function that receives the options
    // and returns the value that you would have normally passed in using the regular API.
    // --- ./plugins/markdown.js :
    const plugin = require('tailwindcss/plugin')
    module.exports = plugin.withOptions(function (options = {}) {
      return function({ addComponents }) {
        const className = options.className ?? 'markdown';
        addComponents({
          [`.${className}`]: {
            // ...
          }
        })
      }
    }, function (options) {
      return {
        theme: {
          markdown: {
            // ...
          }
        },
      }
    })
    // invoke plugin:
    // --- tailwind.config.js :
    /** @type {import('tailwindcss').Config} */
    module.exports = {
      theme: {
        // ...
      },
      plugins: [
        require('./plugins/markdown.js')({
          className: 'wysiwyg'
        })
        // also register plugins created this way normally
        // without invoking them if they dont need to pass in any custom options:
        require('./plugins/markdown.js')
      ],
    }
  
OFFICIAL PLUGINS
    @tailwindcss/typography (v0.5.10)

      // set of 'prose' classes for vanilla HTML (rendered from Markdown, or pulled from a CMS)
      // install:
      npm install -D @tailwindcss/typography
      // tailwind.config.js
      module.exports = {
        theme: {
          extend: {
            typography: ({ theme }) => ({
              // --- adding custom color theme:
              pink: {
                css: {
                  '--tw-prose-body': theme('colors.pink[800]'),
                  '--tw-prose-headings': theme('colors.pink[900]'),
                  '--tw-prose-lead': theme('colors.pink[700]'),
                  '--tw-prose-links': theme('colors.pink[900]'),
                  '--tw-prose-bold': theme('colors.pink[900]'),
                  '--tw-prose-counters': theme('colors.pink[600]'),
                  '--tw-prose-bullets': theme('colors.pink[400]'),
                  '--tw-prose-hr': theme('colors.pink[300]'),
                  '--tw-prose-quotes': theme('colors.pink[900]'),
                  '--tw-prose-quote-borders': theme('colors.pink[300]'),
                  '--tw-prose-captions': theme('colors.pink[700]'),
                  '--tw-prose-code': theme('colors.pink[900]'),
                  '--tw-prose-pre-code': theme('colors.pink[100]'),
                  '--tw-prose-pre-bg': theme('colors.pink[900]'),
                  '--tw-prose-th-borders': theme('colors.pink[300]'),
                  '--tw-prose-td-borders': theme('colors.pink[200]'),
                  '--tw-prose-invert-body': theme('colors.pink[200]'), // for dark mode (class="prose dark:prose-invert")
                  // ...
                  '--tw-prose-invert-td-borders': theme('coloFormsrs.pink[700]'),,

                }
              },
              // --- customize the raw CSS generated by 'typography' plugin:
              DEFAULT: {
                css: {
                  color: theme('colors.gray.800'), // access 'theme' helper
                  a: {Forms
                    color: '#3182ce',
                    '&:hover': { color: '#2c5282' },
              } } }
            }),
          },
        },
        plugins: [
          require('@tailwindcss/typography'),
          // --- changing the default class name:
          require('@tailwindcss/typography')({ className: 'wysiwyg' }),
          // ...
        ],
      }

      // must be used with the base 'prose' class:
      <article class="prose lg:prose-xl">
        <h1> ... </h1>
        <p> ... </p>
      </article>
      <article class="prose lg:prose-xl"> {{ markdown }} </article>

      // --- choosing a gray scale
      prose-gray    // Gray (default)
      prose-slate   // Slate
      prose-zinc    // Zinc
      prose-neutral // Neutral
      prose-stone   // Stone
      // usage:
      <article class="prose prose-slate"> {{ markdown }} </article>

      // --- type scale, adjust the overall size of typography for different contexts
      prose-sm   // 0.875rem (14px)
      prose-base // 1rem (16px) (default)
      prose-lg   // 1.125rem (18px)
      prose-xl   // 1.25rem (20px)
      prose-2xl  // 1.5rem (24px)
      // must be used with the base 'prose' class:
      <article class="prose md:prose-lg xl:prose-xl"> {{ markdown }} </article>

      // --- dark mode:
      <article class="prose dark:prose-invert"> {{ markdown }} </article>

      // --- element modifiers
      prose-headings:{utility} // h1, h2, h3, h4, th
      prose-lead:{utility}     // [class~="lead"]
      prose-h1:{utility}       // h1
      prose-h2:{utility}       // h2
      prose-h3:{utility}       // h3
      prose-h4:{utility}       // h4
      prose-p:{utility}        // p
      prose-a:{utility}        // a
      prose-blockquote:{utility} // blockquote
      prose-figure:{utility}   // figure
      prose-figcaption:{utility} // figcaption
      prose-strong:{utility}   // strong
      prose-em:{utility}       // em
      prose-code:{utility}     // code
      prose-pre:{utility}      // pre
      prose-ol:{utility}       // ol
      prose-ul:{utility}       // ul
      prose-li:{utility}       // li
      prose-table:{utility}    // tableForms
      prose-thead:{utility}    // thead
      prose-tr:{utility}       // tr
      prose-th:{utility}       // th
      prose-td:{utility}       // td
      prose-img:{utility}      // img
      prose-video:{utility}    // video
      prose-hr:{utility}       // hr
      // usage:
      <article class="prose prose-img:rounded-xl prose-headings:underline prose-a:text-blue-600"> {{ markdown }} </article>
      // stacking with other modifiers:
      <article class="prose prose-a:text-blue-600 hover:prose-a:text-blue-500"> {{ markdown }} </article>

      // --- overriding max-width, add 'max-w-none' to override the embedded 'max-width':
      <article class="prose max-w-none"> {{ markdown }} </article>

      // --- undoing typography styles
      <article class="prose">
        <h1> ... </h1>
        <p> ... </p>
        <div class="not-prose"> prose-free block, nesting new 'prose' instances here is not available </div>
        <p> ... </p>
      </article>
    
    @tailwindcss/forms (v0.5.7)

      // form styles reset to a simple defaults that are easy to override with utilities
      // install:
      npm install -D @tailwindcss/forms
      // tailwind.config.js
      module.exports = {
        theme: {
          // ...
        },
        plugins: [
          require('@tailwindcss/forms'),
          // class generation strategy, if both the global (base) styles and classes doesnt work well
          require("@tailwindcss/forms")({
            // base strategy, form elements are styled globally, and no form-{name} classes are generated
            strategy: 'base', // only generate global styles
            // class strategy, form elements are not styled globally, and instead must be styled using the generated form-{name} classes
            strategy: 'class', // only generate classes
          }),
          // ...
        ],
      }
      // customize padding on a select element:
      <select class="px-4 py-3 rounded-full"> ... </select>
      // change a checkbox color using 'text' color utilities:
      <input type="checkbox" class="rounded text-pink-500" />

      // list of supported form elements, and classes which can be used to explicitly apply the form styles to a non-form  element
      form-input    // [type='text']
      form-input    // [type='password']
      form-input    // [type='email']
      form-input    // [type='number']
      form-input    // [type='url']
      form-input    // [type='date']
      form-input    // [type='datetime-local']
      form-input    // [type='month']
      form-input    // [type='week']
      form-input    // [type='time']
      form-input    // [type='search']
      form-input    // [type='tel']
      form-checkbox //[type='checkbox']
      form-radio    // [type='radio']
      form-select   // select
      form-multiselect // select[multiple]
      form-textarea // textarea
      // classes usage:
      <input type="email" class="form-input px-4 py-3 rounded-full" />
      <select class="form-select px-4 py-3 rounded-full"> ... </select>
      <input type="checkbox" class="form-checkbox rounded text-pink-500" />


      // --- EXAMPLES

      <div class="py-12">
        <h2 class="text-2xl font-bold">Simple</h2>
        <div class="mt-8 max-w-md">
          <div class="grid grid-cols-1 gap-6">
            <label class="block">
              <span class="text-gray-700">Full name</span>
              <input type="text" class="mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-indigo-300 focus:ring focus:ring-indigo-200 focus:ring-opacity-50" placeholder="">
            </label>
            <label class="block">
              <span class="text-gray-700">Email address</span>
              <input type="email" class="mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-indigo-300 focus:ring focus:ring-indigo-200 focus:ring-opacity-50" placeholder="john@example.com">
            </label>
            <label class="block">
              <span class="text-gray-700">When is your event?</span>
              <input type="date" class="mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-indigo-300 focus:ring focus:ring-indigo-200 focus:ring-opacity-50">
            </label>
            <label class="block">
              <span class="text-gray-700">What type of event is it?</span>
              <select class="block w-full mt-1 rounded-md border-gray-300 shadow-sm focus:border-indigo-300 focus:ring focus:ring-indigo-200 focus:ring-opacity-50">
                <option>Corporate event</option> <option>Wedding</option> <option>Birthday</option> <option>Other</option>
              </select>
            </label>
            <label class="block">
              <span class="text-gray-700">Additional details</span>
              <textarea class="mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-indigo-300 focus:ring focus:ring-indigo-200 focus:ring-opacity-50" rows="3"></textarea>
            </label>
            <div class="block">
              <div class="mt-2">
                <div>
                  <label class="inline-flex items-center">
                    <input type="checkbox" class="rounded border-gray-300 text-indigo-600 shadow-sm focus:border-indigo-300 focus:ring focus:ring-offset-0 focus:ring-indigo-200 focus:ring-opacity-50" checked="">
                    <span class="ml-2">Email me news and special offers</spa// inherit;n>
                  </label>
                </div>
              </div>
            </div>
          </div>
        </div>
      </div>

      <div class="py-12">
        <h2 class="text-2xl font-bold">Underline</h2>
        <div class="mt-8 max-w-md">
          <div class="grid grid-cols-1 gap-6">
            <label class="block">
              <span class="text-gray-700">Full name</span>
              <input type="text" class="mt-0 block w-full px-0.5 border-0 border-b-2 border-gray-200 focus:ring-0 focus:border-black" placeholder="">
            </label>
            <label class="block">
              <span class="text-gray-700">Email address</span>
              <input type="email" class="mt-0 block w-full px-0.5 border-0 border-b-2 border-gray-200 focus:ring-0 focus:border-black" placeholder="john@example.com">
            </label>
            <label class="block">
              <span class="text-gray-700">When is your event?</span>
              <input type="date" class="mt-0 block w-full px-0.5 border-0 border-b-2 border-gray-200 focus:ring-0 focus:border-black">
            </label>
            <label class="block">
              <span class="text-gray-700">What type of event is it?</span>
              <select class="block w-full mt-0 px-0.5 border-0 border-b-2 border-gray-200 focus:ring-0 focus:border-black">
                <option>Corporate event</option> <option>Wedding</option> <option>Birthday</option> <option>Other</option>
              </select>
            </label>
            <label class="block">
              <span class="text-gray-700">Additional details</span>
              <textarea class="mt-0 block w-full px-0.5 border-0 border-b-2 border-gray-200 focus:ring-0 focus:border-black" rows="2"></textarea>
            </label>
            <div class="block">
              <div class="mt-2">
                <div>
                  <label class="inline-flex items-center">
                    <input type="checkbox" class="border-gray-300 border-2 text-black focus:border-gray-300 focus:ring-black">
                    <span class="ml-2">Email me news and special offers</span>
                  </label>
                </div>
              </div>
            </div>
          </div>
        </div>
      </div>

      <div class="py-12">
        <h2 class="text-2xl font-bold">Solid</h2>
        <div class="mt-8 max-w-md">
          <div class="grid grid-cols-1 gap-6">
            <label class="block">
              <span class="text-gray-700">Full name</span>
              <input type="text" class="mt-1 block w-full rounded-md bg-gray-100 border-transparent focus:border-gray-500 focus:bg-white focus:ring-0" placeholder="">
            </label>
            <label class="block">
              <span class="text-gray-700">Email address</span>
              <input type="email" class="mt-1 block w-full rounded-md bg-gray-100 border-transparent focus:border-gray-500 focus:bg-white focus:ring-0" placeholder="john@example.com">
            </label>
            <label class="block">
              <span class="text-gray-700">When is your event?</span>
              <input type="date" class="mt-1 block w-full rounded-md bg-gray-100 border-transparent focus:border-gray-500 focus:bg-white focus:ring-0">
            </label>
            <label class="block">
              <span class="text-gray-700">What type of event is it?</span>
              <select class="block w-full mt-1 rounded-md bg-gray-100 border-transparent focus:border-gray-500 focus:bg-white focus:ring-0">
                <option>Corporate event</option> <option>Wedding</option> <option>Birthday</option> <option>Other</option>
              </select>
            </label>
            <label class="block">
              <span class="text-gray-700">Additional details</span>
              <textarea class="mt-1 block w-full rounded-md bg-gray-100 border-transparent focus:border-gray-500 focus:bg-white focus:ring-0" rows="3"></textarea>
            </label>
            <div class="block">
              <div class="mt-2">
                <div>
                  <label class="inline-flex items-center">
                    <input type="checkbox" class="rounded bg-gray-200 border-transparent focus:border-transparent focus:bg-gray-200 text-gray-700 focus:ring-1 focus:ring-offset-2 focus:ring-gray-500">
                    <span class="ml-2">Email me news and special offers</span>
                  </label>
                </div>
              </div>
            </div>
          </div>
        </div>
      </div>
    
    @tailwindcss/aspect-ratio (v0.4.2)

      // composable API for giving elements a fixed aspect ratio
      // will be deprecated once the aspect-ratio property is supported in modern browsers in favor of official support in Tailwind CSS itself.
      // install:
      npm install -D @tailwindcss/aspect-ratio
      // tailwind.config.js
      module.exports = {
        theme: {
          // ...
        },
        corePlugins: {
          aspectRatio: false, // disable the aspectRatio core plugin to avoid conflicts
        },
        plugins: [
          require('@tailwindcss/aspect-ratio'),
          // ...
        ],
      }
      // classes:
      aspect-w-{1|...|16}
      aspect-h-{1|...|16}

      // combine the aspect-w-{n} and aspect-h-{n} classes to specify the aspect ratio for an element,
      // assign the aspect ratio to a parent element, and make the actual element you are trying to size the only child of that parent:
      <div class="aspect-w-16 aspect-h-9">
        <iframe src="https://..." frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
      </div>

      // removing any aspect ratio behavior:
      <div class="aspect-w-16 aspect-h-9 xl:aspect-none"> ... </div>
      // when removing aspect ratio behavior, if nested elements have w-{n} or h-{n} classes,
      // ensure they are re-declared with a matching breakpoint prefix:
      <div class="aspect-w-16 aspect-h-9 xl:aspect-none">
        <img src="..." alt="..." class="w-full h-full object-center object-cover lg:w-full lg:h-full" />
      </div>

      // tailwind.config.js
      module.exports = {
        theme: {
          aspectRatio: {
            1: '1',
            2: '2',
            3: '3',
            4: '4',
          }
        },
        variants: {
          aspectRatio: ['responsive', 'hover']
        }
      }

      // use this plugin to support Safari 14, where aspect-ratio CSS property isnt supported (native Tailwind utilities way).
      // to use both approaches (transitioning, ...), overwrite default aspectRatio values by this plugin values,
      // tailwind.config.js
      module.exports = {
        // ...
        theme: {
          aspectRatio: {
            auto: 'auto',
            square: '1 / 1',
            video: '16 / 9',
            1: '1',
            2: '2',
            3: '3',
            4: '4',
            5: '5',
            6: '6',
            7: '7',
            8: '8',
            9: '9',
            10: '10',
            11: '11',
            12: '12',
            13: '13',
            14: '14',
            15: '15',
            16: '16',
          },
        },
      }
    
    @tailwindcss/container-queries (v0.1.1)

      // utilities for container queries
      // install:
      npm install @tailwindcss/container-queries
      // tailwind.config.js
      module.exports = {
        theme: {
          // ...
        },
        plugins: [
          require('@tailwindcss/container-queries'),
          // ...
        ],
      }
      // container sizes:
      @xs  // @container (min-width: 20rem /* 320px */)
      @sm  // @container (min-width: 24rem /* 384px */)
      @md  // @container (min-width: 28rem /* 448px */)
      @lg  // @container (min-width: 32rem /* 512px */)
      @xl  // @container (min-width: 36rem /* 576px */)
      @2xl // @container (min-width: 42rem /* 672px */)
      @3xl // @container (min-width: 48rem /* 768px */)
      @4xl // @container (min-width: 56rem /* 896px */)
      @5xl // @container (min-width: 64rem /* 1024px */)
      @6xl // @container (min-width: 72rem /* 1152px */)
      @7xl // @container (min-width: 80rem /* 1280px */)

      // mark an element with @container class,
      // and then applying styles based on the size of that container using the container variants:
      <div class="@container">
        <div class="@lg:underline"> this text will be underlined when the container is larger than '32rem' </div>
      </div>

      // removing a container:
      <div class="@container xl:@container-normal"> ... </div>

      // @container/{name} - named containers:
      <div class="@container/main">
        // ...
        <div class="@lg/main:underline"> this text will be underlined when the 'main' container is larger than '32rem' </div>
      </div>

      // arbitrary container sizes:
      <div class="@container">
        <div class="@[17.5rem]:underline"> this text will be underlined when the 'main' container is larger than '17.5rem' </div>
      </div>

      // with a Tailwind prefix, prefix both the @container class and any classes where a container query modifier is used:
      <div class="tw-@container">
        // ...
        <div class="@lg:tw-underline"> ... </div>
      </div>

      // tailwind.config.js > containers
      module.exports = {
        theme: {
          extend: {
            containers: {
              '2xs': '16rem',
            },
          },
        },
      }
    

VALUES


    // --- COLORS
    inherit     // inherit;
    current     // currentColor;
    transparent // transparent;
    black       // #000;
    white       // #fff;
    gray, slate, zinc, neutral, stone,
    red, orange, amber, yellow, lime, green, emerald, teal,
    cyan, sky, blue, indigo, violet, purple, fuchsia, pink, rose
    // UTILITY-{inherit|current|transparent|black|white|none}
    // UTILITY-{COLOR}-{50|100|200|...|900|950}


    // --- SIZING
    // 0, px, 0.5, 1, ..., 96
    // 1/2, 1/3, 2/3, 1/4, 2/4, 3/4, 1/5, 2/5, 3/5, 4/5, 1/6, 2/6, 3/6, 4/6, 5/6
    // 1/12, 2/12, 3/12, 4/12, 5/12, 6/12, 7/12, 8/12, 9/12, 10/12, 11/12
    // full, screen, auto, min, max, fit, svw, lvw, dvw, svh, lvh, dvh
    // values:
    0    // 0px;
    px   // 1px;
    0.5  // 0.125rem; /* 2px */
    1    // 0.25rem; /* 4px */
    1.5  // 0.375rem; /* 6px */
    2    // 0.5rem; /* 8px */
    2.5  // 0.625rem; /* 10px */
    3    // 0.75rem; /* 12px */
    3.5  // 0.875rem; /* 14px */
    4    // 1rem; /* 16px */
    5    // 1.25rem; /* 20px */
    6    // 1.5rem; /* 24px */
    7    // 1.75rem; /* 28px */
    8    // 2rem; /* 32px */
    9    // 2.25rem; /* 36px */
    10   // 2.5rem; /* 40px */
    11   // 2.75rem; /* 44px */
    12   // 3rem; /* 48px */
    14   // 3.5rem; /* 56px */
    16   // 4rem; /* 64px */
    20   // 5rem; /* 80px */
    24   // 6rem; /* 96px */
    28   // 7rem; /* 112px */
    32   // 8rem; /* 128px */
    36   // 9rem; /* 144px */
    40   // 10rem; /* 160px */
    44   // 11rem; /* 176px */
    48   // 12rem; /* 192px */
    52   // 13rem; /* 208px */
    56   // 14rem; /* 224px */
    60   // 15rem; /* 240px */
    64   // 16rem; /* 256px */
    72   // 18rem; /* 288px */
    80   // 20rem; /* 320px */
    96   // 24rem; /* 384px */

    1/2    // 50%
    1/3    // 33.333333%
    2/3    // 66.666667%
    1/4    // 25%
    2/4    // 50%
    3/4    // 75%
    1/5    // 20%
    2/5    // 40%
    3/5    // 60%
    4/5    // 80%
    1/6    // 16.666667%
    2/6    // 33.333333%
    3/6    // 50%
    4/6    // 66.666667%
    5/6    // 83.333333%
    1/12   // 8.333333%
    2/12   // 16.666667%
    3/12   // 25%
    4/12   // 33.333333%
    5/12   // 41.666667%
    6/12   // 50%
    7/12   // 58.333333%
    8/12   // 66.666667%
    9/12   // 75%
    10/12  // 83.333333%
    11/12  // 91.666667%

    full   // 100%
    screen // 100vw;

    min    // min-content;
    max    // max-content;
    fit    // fit-content;

    svw    // 100svw;
    lvw    // 100lvw;
    dvw    // 100dvw;

    svh    // 100svh
    lvh    // 100lvh
    dvh    // 100dvh

    // --- BREAKPOINTS, RESPONSIVE DESIGN
    xs        // 20rem /* 320px */
    sm        // 24rem /* 384px */
    md        // 28rem /* 448px */
    lg        // 32rem /* 512px */
    xl        // 36rem /* 576px */
    2xl       // 42rem /* 672px */
    3xl       // 48rem /* 768px */
    4xl       // 56rem /* 896px */
    5xl       // 64rem /* 1024px */
    6xl       // 72rem /* 1152px */
    7xl       // 80rem /* 1280px */
    prose       // 65ch
    screen-sm   // 40rem
    screen-md   // 768px
    screen-lg   // 1024px
    screen-xl   // 1280px
    screen-2xl  // 1536px
  
tailwindcss/stubs/config.full.js

    module.exports = {
      content: [],
      presets: [],
      darkMode: 'media', // or 'class'
      theme: {
        accentColor: ({ theme }) => ({
          ...theme('colors'),
          auto: 'auto',
        }),
        animation: {
          none: 'none',
          spin: 'spin 1s linear infinite',
          ping: 'ping 1s cubic-bezier(0, 0, 0.2, 1) infinite',
          pulse: 'pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite',
          bounce: 'bounce 1s infinite',
        },
        aria: {
          busy: 'busy="true"',
          checked: 'checked="true"',
          disabled: 'disabled="true"',
          expanded: 'expanded="true"',
          hidden: 'hidden="true"',
          pressed: 'pressed="true"',
          readonly: 'readonly="true"',
          required: 'required="true"',
          selected: 'selected="true"',
        },
        aspectRatio: {
          auto: 'auto',
          square: '1 / 1',
          video: '16 / 9',
        },
        backdropBlur: ({ theme }) => theme('blur'),
        backdropBrightness: ({ theme }) => theme('brightness'),
        backdropContrast: ({ theme }) => theme('contrast'),
        backdropGrayscale: ({ theme }) => theme('grayscale'),
        backdropHueRotate: ({ theme }) => theme('hueRotate'),
        backdropInvert: ({ theme }) => theme('invert'),
        backdropOpacity: ({ theme }) => theme('opacity'),
        backdropSaturate: ({ theme }) => theme('saturate'),
        backdropSepia: ({ theme }) => theme('sepia'),
        backgroundColor: ({ theme }) => theme('colors'),
        backgroundImage: {
          none: 'none',
          'gradient-to-t': 'linear-gradient(to top, var(--tw-gradient-stops))',
          'gradient-to-tr': 'linear-gradient(to top right, var(--tw-gradient-stops))',
          'gradient-to-r': 'linear-gradient(to right, var(--tw-gradient-stops))',
          'gradient-to-br': 'linear-gradient(to bottom right, var(--tw-gradient-stops))',
          'gradient-to-b': 'linear-gradient(to bottom, var(--tw-gradient-stops))',
          'gradient-to-bl': 'linear-gradient(to bottom left, var(--tw-gradient-stops))',
          'gradient-to-l': 'linear-gradient(to left, var(--tw-gradient-stops))',
          'gradient-to-tl': 'linear-gradient(to top left, var(--tw-gradient-stops))',
        },
        backgroundOpacity: ({ theme }) => theme('opacity'),
        backgroundPosition: {
          bottom: 'bottom',
          center: 'center',
          left: 'left',
          'left-bottom': 'left bottom',
          'left-top': 'left top',
          right: 'right',
          'right-bottom': 'right bottom',
          'right-top': 'right top',
          top: 'top',
        },
        backgroundSize: {
          auto: 'auto',
          cover: 'cover',
          contain: 'contain',
        },
        blur: {
          0: '0',
          none: '0',
          sm: '4px',
          DEFAULT: '8px',
          md: '12px',
          lg: '16px',
          xl: '24px',
          '2xl': '40px',
          '3xl': '64px',
        },
        borderColor: ({ theme }) => ({
          ...theme('colors'),
          DEFAULT: theme('colors.gray.200', 'currentColor'),
        }),
        borderOpacity: ({ theme }) => theme('opacity'),
        borderRadius: {
          none: '0px',
          sm: '0.125rem',
          DEFAULT: '0.25rem',
          md: '0.375rem',
          lg: '0.5rem',
          xl: '0.75rem',
          '2xl': '1rem',
          '3xl': '1.5rem',
          full: '9999px',
        },
        borderSpacing: ({ theme }) => ({
          ...theme('spacing'),
        }),
        borderWidth: {
          DEFAULT: '1px',
          0: '0px',
          2: '2px',
          4: '4px',
          8: '8px',
        },
        boxShadow: {
          sm: '0 1px 2px 0 rgb(0 0 0 / 0.05)',
          DEFAULT: '0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)',
          md: '0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)',
          lg: '0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)',
          xl: '0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)',
          '2xl': '0 25px 50px -12px rgb(0 0 0 / 0.25)',
          inner: 'inset 0 2px 4px 0 rgb(0 0 0 / 0.05)',
          none: 'none',
        },
        boxShadowColor: ({ theme }) => theme('colors'),
        brightness: {
          0: '0',
          50: '.5',
          75: '.75',
          90: '.9',
          95: '.95',
          100: '1',
          105: '1.05',
          110: '1.1',
          125: '1.25',
          150: '1.5',
          200: '2',
        },
        caretColor: ({ theme }) => theme('colors'),
        colors: ({ colors }) => ({
          inherit: colors.inherit,
          current: colors.current,
          transparent: colors.transparent,
          black: colors.black,
          white: colors.white,
          slate: colors.slate,
          gray: colors.gray,
          zinc: colors.zinc,
          neutral: colors.neutral,
          stone: colors.stone,
          red: colors.red,
          orange: colors.orange,
          amber: colors.amber,
          yellow: colors.yellow,
          lime: colors.lime,
          green: colors.green,
          emerald: colors.emerald,
          teal: colors.teal,
          cyan: colors.cyan,
          sky: colors.sky,
          blue: colors.blue,
          indigo: colors.indigo,
          violet: colors.violet,
          purple: colors.purple,
          fuchsia: colors.fuchsia,
          pink: colors.pink,
          rose: colors.rose,
        }),
        columns: {
          auto: 'auto',
          1: '1',
          2: '2',
          3: '3',
          4: '4',
          5: '5',
          6: '6',
          7: '7',
          8: '8',
          9: '9',
          10: '10',
          11: '11',
          12: '12',
          '3xs': '16rem',
          '2xs': '18rem',
          xs: '20rem',
          sm: '24rem',
          md: '28rem',
          lg: '32rem',
          xl: '36rem',
          '2xl': '42rem',
          '3xl': '48rem',
          '4xl': '56rem',
          '5xl': '64rem',
          '6xl': '72rem',
          '7xl': '80rem',
        },
        container: {},
        content: {
          none: 'none',
        },
        contrast: {
          0: '0',
          50: '.5',
          75: '.75',
          100: '1',
          125: '1.25',
          150: '1.5',
          200: '2',
        },
        cursor: {
          auto: 'auto',
          default: 'default',
          pointer: 'pointer',
          wait: 'wait',
          text: 'text',
          move: 'move',
          help: 'help',
          'not-allowed': 'not-allowed',
          none: 'none',
          'context-menu': 'context-menu',
          progress: 'progress',
          cell: 'cell',
          crosshair: 'crosshair',
          'vertical-text': 'vertical-text',
          alias: 'alias',
          copy: 'copy',
          'no-drop': 'no-drop',
          grab: 'grab',
          grabbing: 'grabbing',
          'all-scroll': 'all-scroll',
          'col-resize': 'col-resize',
          'row-resize': 'row-resize',
          'n-resize': 'n-resize',
          'e-resize': 'e-resize',
          's-resize': 's-resize',
          'w-resize': 'w-resize',
          'ne-resize': 'ne-resize',
          'nw-resize': 'nw-resize',
          'se-resize': 'se-resize',
          'sw-resize': 'sw-resize',
          'ew-resize': 'ew-resize',
          'ns-resize': 'ns-resize',
          'nesw-resize': 'nesw-resize',
          'nwse-resize': 'nwse-resize',
          'zoom-in': 'zoom-in',
          'zoom-out': 'zoom-out',
        },
        divideColor: ({ theme }) => theme('borderColor'),
        divideOpacity: ({ theme }) => theme('borderOpacity'),
        divideWidth: ({ theme }) => theme('borderWidth'),
        dropShadow: {
          sm: '0 1px 1px rgb(0 0 0 / 0.05)',
          DEFAULT: ['0 1px 2px rgb(0 0 0 / 0.1)', '0 1px 1px rgb(0 0 0 / 0.06)'],
          md: ['0 4px 3px rgb(0 0 0 / 0.07)', '0 2px 2px rgb(0 0 0 / 0.06)'],
          lg: ['0 10px 8px rgb(0 0 0 / 0.04)', '0 4px 3px rgb(0 0 0 / 0.1)'],
          xl: ['0 20px 13px rgb(0 0 0 / 0.03)', '0 8px 5px rgb(0 0 0 / 0.08)'],
          '2xl': '0 25px 25px rgb(0 0 0 / 0.15)',
          none: '0 0 #0000',
        },
        fill: ({ theme }) => ({
          none: 'none',
          ...theme('colors'),
        }),
        flex: {
          1: '1 1 0%',
          auto: '1 1 auto',
          initial: '0 1 auto',
          none: 'none',
        },
        flexBasis: ({ theme }) => ({
          auto: 'auto',
          ...theme('spacing'),
          '1/2': '50%',
          '1/3': '33.333333%',
          '2/3': '66.666667%',
          '1/4': '25%',
          '2/4': '50%',
          '3/4': '75%',
          '1/5': '20%',
          '2/5': '40%',
          '3/5': '60%',
          '4/5': '80%',
          '1/6': '16.666667%',
          '2/6': '33.333333%',
          '3/6': '50%',
          '4/6': '66.666667%',
          '5/6': '83.333333%',
          '1/12': '8.333333%',
          '2/12': '16.666667%',
          '3/12': '25%',
          '4/12': '33.333333%',
          '5/12': '41.666667%',
          '6/12': '50%',
          '7/12': '58.333333%',
          '8/12': '66.666667%',
          '9/12': '75%',
          '10/12': '83.333333%',
          '11/12': '91.666667%',
          full: '100%',
        }),
        flexGrow: {
          0: '0',
          DEFAULT: '1',
        },
        flexShrink: {
          0: '0',
          DEFAULT: '1',
        },
        fontFamily: {
          sans: [
            'ui-sans-serif',
            'system-ui',
            'sans-serif',
            '"Apple Color Emoji"',
            '"Segoe UI Emoji"',
            '"Segoe UI Symbol"',
            '"Noto Color Emoji"',
          ],
          serif: ['ui-serif', 'Georgia', 'Cambria', '"Times New Roman"', 'Times', 'serif'],
          mono: [
            'ui-monospace',
            'SFMono-Regular',
            'Menlo',
            'Monaco',
            'Consolas',
            '"Liberation Mono"',
            '"Courier New"',
            'monospace',
          ],
        },
        fontSize: {
          xs: ['0.75rem', { lineHeight: '1rem' }],
          sm: ['0.875rem', { lineHeight: '1.25rem' }],
          base: ['1rem', { lineHeight: '1.5rem' }],
          lg: ['1.125rem', { lineHeight: '1.75rem' }],
          xl: ['1.25rem', { lineHeight: '1.75rem' }],
          '2xl': ['1.5rem', { lineHeight: '2rem' }],
          '3xl': ['1.875rem', { lineHeight: '2.25rem' }],
          '4xl': ['2.25rem', { lineHeight: '2.5rem' }],
          '5xl': ['3rem', { lineHeight: '1' }],
          '6xl': ['3.75rem', { lineHeight: '1' }],
          '7xl': ['4.5rem', { lineHeight: '1' }],
          '8xl': ['6rem', { lineHeight: '1' }],
          '9xl': ['8rem', { lineHeight: '1' }],
        },
        fontWeight: {
          thin: '100',
          extralight: '200',
          light: '300',
          normal: '400',
          medium: '500',
          semibold: '600',
          bold: '700',
          extrabold: '800',
          black: '900',
        },
        gap: ({ theme }) => theme('spacing'),
        gradientColorStops: ({ theme }) => theme('colors'),
        gradientColorStopPositions: {
          '0%': '0%',
          '5%': '5%',
          '10%': '10%',
          '15%': '15%',
          '20%': '20%',
          '25%': '25%',
          '30%': '30%',
          '35%': '35%',
          '40%': '40%',
          '45%': '45%',
          '50%': '50%',
          '55%': '55%',
          '60%': '60%',
          '65%': '65%',
          '70%': '70%',
          '75%': '75%',
          '80%': '80%',
          '85%': '85%',
          '90%': '90%',
          '95%': '95%',
          '100%': '100%',
        },
        grayscale: {
          0: '0',
          DEFAULT: '100%',
        },
        gridAutoColumns: {
          auto: 'auto',
          min: 'min-content',
          max: 'max-content',
          fr: 'minmax(0, 1fr)',
        },
        gridAutoRows: {
          auto: 'auto',
          min: 'min-content',
          max: 'max-content',
          fr: 'minmax(0, 1fr)',
        },
        gridColumn: {
          auto: 'auto',
          'span-1': 'span 1 / span 1',
          'span-2': 'span 2 / span 2',
          'span-3': 'span 3 / span 3',
          'span-4': 'span 4 / span 4',
          'span-5': 'span 5 / span 5',
          'span-6': 'span 6 / span 6',
          'span-7': 'span 7 / span 7',
          'span-8': 'span 8 / span 8',
          'span-9': 'span 9 / span 9',
          'span-10': 'span 10 / span 10',
          'span-11': 'span 11 / span 11',
          'span-12': 'span 12 / span 12',
          'span-full': '1 / -1',
        },
        gridColumnEnd: {
          auto: 'auto',
          1: '1',
          2: '2',
          3: '3',
          4: '4',
          5: '5',
          6: '6',
          7: '7',
          8: '8',
          9: '9',
          10: '10',
          11: '11',
          12: '12',
          13: '13',
        },
        gridColumnStart: {
          auto: 'auto',
          1: '1',
          2: '2',
          3: '3',
          4: '4',
          5: '5',
          6: '6',
          7: '7',
          8: '8',
          9: '9',
          10: '10',
          11: '11',
          12: '12',
          13: '13',
        },
        gridRow: {
          auto: 'auto',
          'span-1': 'span 1 / span 1',
          'span-2': 'span 2 / span 2',
          'span-3': 'span 3 / span 3',
          'span-4': 'span 4 / span 4',
          'span-5': 'span 5 / span 5',
          'span-6': 'span 6 / span 6',
          'span-7': 'span 7 / span 7',
          'span-8': 'span 8 / span 8',
          'span-9': 'span 9 / span 9',
          'span-10': 'span 10 / span 10',
          'span-11': 'span 11 / span 11',
          'span-12': 'span 12 / span 12',
          'span-full': '1 / -1',
        },
        gridRowEnd: {
          auto: 'auto',
          1: '1',
          2: '2',
          3: '3',
          4: '4',
          5: '5',
          6: '6',
          7: '7',
          8: '8',
          9: '9',
          10: '10',
          11: '11',
          12: '12',
          13: '13',
        },
        gridRowStart: {
          auto: 'auto',
          1: '1',
          2: '2',
          3: '3',
          4: '4',
          5: '5',
          6: '6',
          7: '7',
          8: '8',
          9: '9',
          10: '10',
          11: '11',
          12: '12',
          13: '13',
        },
        gridTemplateColumns: {
          none: 'none',
          subgrid: 'subgrid',
          1: 'repeat(1, minmax(0, 1fr))',
          2: 'repeat(2, minmax(0, 1fr))',
          3: 'repeat(3, minmax(0, 1fr))',
          4: 'repeat(4, minmax(0, 1fr))',
          5: 'repeat(5, minmax(0, 1fr))',
          6: 'repeat(6, minmax(0, 1fr))',
          7: 'repeat(7, minmax(0, 1fr))',
          8: 'repeat(8, minmax(0, 1fr))',
          9: 'repeat(9, minmax(0, 1fr))',
          10: 'repeat(10, minmax(0, 1fr))',
          11: 'repeat(11, minmax(0, 1fr))',
          12: 'repeat(12, minmax(0, 1fr))',
        },
        gridTemplateRows: {
          none: 'none',
          subgrid: 'subgrid',
          1: 'repeat(1, minmax(0, 1fr))',
          2: 'repeat(2, minmax(0, 1fr))',
          3: 'repeat(3, minmax(0, 1fr))',
          4: 'repeat(4, minmax(0, 1fr))',
          5: 'repeat(5, minmax(0, 1fr))',
          6: 'repeat(6, minmax(0, 1fr))',
          7: 'repeat(7, minmax(0, 1fr))',
          8: 'repeat(8, minmax(0, 1fr))',
          9: 'repeat(9, minmax(0, 1fr))',
          10: 'repeat(10, minmax(0, 1fr))',
          11: 'repeat(11, minmax(0, 1fr))',
          12: 'repeat(12, minmax(0, 1fr))',
        },
        height: ({ theme }) => ({
          auto: 'auto',
          ...theme('spacing'),
          '1/2': '50%',
          '1/3': '33.333333%',
          '2/3': '66.666667%',
          '1/4': '25%',
          '2/4': '50%',
          '3/4': '75%',
          '1/5': '20%',
          '2/5': '40%',
          '3/5': '60%',
          '4/5': '80%',
          '1/6': '16.666667%',
          '2/6': '33.333333%',
          '3/6': '50%',
          '4/6': '66.666667%',
          '5/6': '83.333333%',
          full: '100%',
          screen: '100vh',
          svh: '100svh',
          lvh: '100lvh',
          dvh: '100dvh',
          min: 'min-content',
          max: 'max-content',
          fit: 'fit-content',
        }),
        hueRotate: {
          0: '0deg',
          15: '15deg',
          30: '30deg',
          60: '60deg',
          90: '90deg',
          180: '180deg',
        },
        inset: ({ theme }) => ({
          auto: 'auto',
          ...theme('spacing'),
          '1/2': '50%',
          '1/3': '33.333333%',
          '2/3': '66.666667%',
          '1/4': '25%',
          '2/4': '50%',
          '3/4': '75%',
          full: '100%',
        }),
        invert: {
          0: '0',
          DEFAULT: '100%',
        },
        keyframes: {
          spin: {
            to: {
              transform: 'rotate(360deg)',
            },
          },
          ping: {
            '75%, 100%': {
              transform: 'scale(2)',
              opacity: '0',
            },
          },
          pulse: {
            '50%': {
              opacity: '.5',
            },
          },
          bounce: {
            '0%, 100%': {
              transform: 'translateY(-25%)',
              animationTimingFunction: 'cubic-bezier(0.8,0,1,1)',
            },
            '50%': {
              transform: 'none',
              animationTimingFunction: 'cubic-bezier(0,0,0.2,1)',
            },
          },
        },
        letterSpacing: {
          tighter: '-0.05em',
          tight: '-0.025em',
          normal: '0em',
          wide: '0.025em',
          wider: '0.05em',
          widest: '0.1em',
        },
        lineHeight: {
          none: '1',
          tight: '1.25',
          snug: '1.375',
          normal: '1.5',
          relaxed: '1.625',
          loose: '2',
          3: '.75rem',
          4: '1rem',
          5: '1.25rem',
          6: '1.5rem',
          7: '1.75rem',
          8: '2rem',
          9: '2.25rem',
          10: '2.5rem',
        },
        listStyleType: {
          none: 'none',
          disc: 'disc',
          decimal: 'decimal',
        },
        listStyleImage: {
          none: 'none',
        },
        margin: ({ theme }) => ({
          auto: 'auto',
          ...theme('spacing'),
        }),
        lineClamp: {
          1: '1',
          2: '2',
          3: '3',
          4: '4',
          5: '5',
          6: '6',
        },
        maxHeight: ({ theme }) => ({
          ...theme('spacing'),
          none: 'none',
          full: '100%',
          screen: '100vh',
          svh: '100svh',
          lvh: '100lvh',
          dvh: '100dvh',
          min: 'min-content',
          max: 'max-content',
          fit: 'fit-content',
        }),
        maxWidth: ({ theme, breakpoints }) => ({
          ...theme('spacing'),
          none: 'none',
          xs: '20rem',
          sm: '24rem',
          md: '28rem',
          lg: '32rem',
          xl: '36rem',
          '2xl': '42rem',
          '3xl': '48rem',
          '4xl': '56rem',
          '5xl': '64rem',
          '6xl': '72rem',
          '7xl': '80rem',
          full: '100%',
          min: 'min-content',
          max: 'max-content',
          fit: 'fit-content',
          prose: '65ch',
          ...breakpoints(theme('screens')),
        }),
        minHeight: ({ theme }) => ({
          ...theme('spacing'),
          full: '100%',
          screen: '100vh',
          svh: '100svh',
          lvh: '100lvh',
          dvh: '100dvh',
          min: 'min-content',
          max: 'max-content',
          fit: 'fit-content',
        }),
        minWidth: ({ theme }) => ({
          ...theme('spacing'),
          full: '100%',
          min: 'min-content',
          max: 'max-content',
          fit: 'fit-content',
        }),
        objectPosition: {
          bottom: 'bottom',
          center: 'center',
          left: 'left',
          'left-bottom': 'left bottom',
          'left-top': 'left top',
          right: 'right',
          'right-bottom': 'right bottom',
          'right-top': 'right top',
          top: 'top',
        },
        opacity: {
          0: '0',
          5: '0.05',
          10: '0.1',
          15: '0.15',
          20: '0.2',
          25: '0.25',
          30: '0.3',
          35: '0.35',
          40: '0.4',
          45: '0.45',
          50: '0.5',
          55: '0.55',
          60: '0.6',
          65: '0.65',
          70: '0.7',
          75: '0.75',
          80: '0.8',
          85: '0.85',
          90: '0.9',
          95: '0.95',
          100: '1',
        },
        order: {
          first: '-9999',
          last: '9999',
          none: '0',
          1: '1',
          2: '2',
          3: '3',
          4: '4',
          5: '5',
          6: '6',
          7: '7',
          8: '8',
          9: '9',
          10: '10',
          11: '11',
          12: '12',
        },
        outlineColor: ({ theme }) => theme('colors'),
        outlineOffset: {
          0: '0px',
          1: '1px',
          2: '2px',
          4: '4px',
          8: '8px',
        },
        outlineWidth: {
          0: '0px',
          1: '1px',
          2: '2px',
          4: '4px',
          8: '8px',
        },
        padding: ({ theme }) => theme('spacing'),
        placeholderColor: ({ theme }) => theme('colors'),
        placeholderOpacity: ({ theme }) => theme('opacity'),
        ringColor: ({ theme }) => ({
          DEFAULT: theme('colors.blue.500', '#3b82f6'),
          ...theme('colors'),
        }),
        ringOffsetColor: ({ theme }) => theme('colors'),
        ringOffsetWidth: {
          0: '0px',
          1: '1px',
          2: '2px',
          4: '4px',
          8: '8px',
        },
        ringOpacity: ({ theme }) => ({
          DEFAULT: '0.5',
          ...theme('opacity'),
        }),
        ringWidth: {
          DEFAULT: '3px',
          0: '0px',
          1: '1px',
          2: '2px',
          4: '4px',
          8: '8px',
        },
        rotate: {
          0: '0deg',
          1: '1deg',
          2: '2deg',
          3: '3deg',
          6: '6deg',
          12: '12deg',
          45: '45deg',
          90: '90deg',
          180: '180deg',
        },
        saturate: {
          0: '0',
          50: '.5',
          100: '1',
          150: '1.5',
          200: '2',
        },
        scale: {
          0: '0',
          50: '.5',
          75: '.75',
          90: '.9',
          95: '.95',
          100: '1',
          105: '1.05',
          110: '1.1',
          125: '1.25',
          150: '1.5',
        },
        screens: {
          sm: '640px',
          md: '768px',
          lg: '1024px',
          xl: '1280px',
          '2xl': '1536px',
        },
        scrollMargin: ({ theme }) => ({
          ...theme('spacing'),
        }),
        scrollPadding: ({ theme }) => theme('spacing'),
        sepia: {
          0: '0',
          DEFAULT: '100%',
        },
        skew: {
          0: '0deg',
          1: '1deg',
          2: '2deg',
          3: '3deg',
          6: '6deg',
          12: '12deg',
        },
        space: ({ theme }) => ({
          ...theme('spacing'),
        }),
        spacing: {
          px: '1px',
          0: '0px',
          0.5: '0.125rem',
          1: '0.25rem',
          1.5: '0.375rem',
          2: '0.5rem',
          2.5: '0.625rem',
          3: '0.75rem',
          3.5: '0.875rem',
          4: '1rem',
          5: '1.25rem',
          6: '1.5rem',
          7: '1.75rem',
          8: '2rem',
          9: '2.25rem',
          10: '2.5rem',
          11: '2.75rem',
          12: '3rem',
          14: '3.5rem',
          16: '4rem',
          20: '5rem',
          24: '6rem',
          28: '7rem',
          32: '8rem',
          36: '9rem',
          40: '10rem',
          44: '11rem',
          48: '12rem',
          52: '13rem',
          56: '14rem',
          60: '15rem',
          64: '16rem',
          72: '18rem',
          80: '20rem',
          96: '24rem',
        },
        stroke: ({ theme }) => ({
          none: 'none',
          ...theme('colors'),
        }),
        strokeWidth: {
          0: '0',
          1: '1',
          2: '2',
        },
        supports: {},
        data: {},
        textColor: ({ theme }) => theme('colors'),
        textDecorationColor: ({ theme }) => theme('colors'),
        textDecorationThickness: {
          auto: 'auto',
          'from-font': 'from-font',
          0: '0px',
          1: '1px',
          2: '2px',
          4: '4px',
          8: '8px',
        },
        textIndent: ({ theme }) => ({
          ...theme('spacing'),
        }),
        textOpacity: ({ theme }) => theme('opacity'),
        textUnderlineOffset: {
          auto: 'auto',
          0: '0px',
          1: '1px',
          2: '2px',
          4: '4px',
          8: '8px',
        },
        transformOrigin: {
          center: 'center',
          top: 'top',
          'top-right': 'top right',
          right: 'right',
          'bottom-right': 'bottom right',
          bottom: 'bottom',
          'bottom-left': 'bottom left',
          left: 'left',
          'top-left': 'top left',
        },
        transitionDelay: {
          0: '0s',
          75: '75ms',
          100: '100ms',
          150: '150ms',
          200: '200ms',
          300: '300ms',
          500: '500ms',
          700: '700ms',
          1000: '1000ms',
        },
        transitionDuration: {
          DEFAULT: '150ms',
          0: '0s',
          75: '75ms',
          100: '100ms',
          150: '150ms',
          200: '200ms',
          300: '300ms',
          500: '500ms',
          700: '700ms',
          1000: '1000ms',
        },
        transitionProperty: {
          none: 'none',
          all: 'all',
          DEFAULT:
            'color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter',
          colors: 'color, background-color, border-color, text-decoration-color, fill, stroke',
          opacity: 'opacity',
          shadow: 'box-shadow',
          transform: 'transform',
        },
        transitionTimingFunction: {
          DEFAULT: 'cubic-bezier(0.4, 0, 0.2, 1)',
          linear: 'linear',
          in: 'cubic-bezier(0.4, 0, 1, 1)',
          out: 'cubic-bezier(0, 0, 0.2, 1)',
          'in-out': 'cubic-bezier(0.4, 0, 0.2, 1)',
        },
        translate: ({ theme }) => ({
          ...theme('spacing'),
          '1/2': '50%',
          '1/3': '33.333333%',
          '2/3': '66.666667%',
          '1/4': '25%',
          '2/4': '50%',
          '3/4': '75%',
          full: '100%',
        }),
        size: ({ theme }) => ({
          auto: 'auto',
          ...theme('spacing'),
          '1/2': '50%',
          '1/3': '33.333333%',
          '2/3': '66.666667%',
          '1/4': '25%',
          '2/4': '50%',
          '3/4': '75%',
          '1/5': '20%',
          '2/5': '40%',
          '3/5': '60%',
          '4/5': '80%',
          '1/6': '16.666667%',
          '2/6': '33.333333%',
          '3/6': '50%',
          '4/6': '66.666667%',
          '5/6': '83.333333%',
          '1/12': '8.333333%',
          '2/12': '16.666667%',
          '3/12': '25%',
          '4/12': '33.333333%',
          '5/12': '41.666667%',
          '6/12': '50%',
          '7/12': '58.333333%',
          '8/12': '66.666667%',
          '9/12': '75%',
          '10/12': '83.333333%',
          '11/12': '91.666667%',
          full: '100%',
          min: 'min-content',
          max: 'max-content',
          fit: 'fit-content',
        }),
        width: ({ theme }) => ({
          auto: 'auto',
          ...theme('spacing'),
          '1/2': '50%',
          '1/3': '33.333333%',
          '2/3': '66.666667%',
          '1/4': '25%',
          '2/4': '50%',
          '3/4': '75%',
          '1/5': '20%',
          '2/5': '40%',
          '3/5': '60%',
          '4/5': '80%',
          '1/6': '16.666667%',
          '2/6': '33.333333%',
          '3/6': '50%',
          '4/6': '66.666667%',
          '5/6': '83.333333%',
          '1/12': '8.333333%',
          '2/12': '16.666667%',
          '3/12': '25%',
          '4/12': '33.333333%',
          '5/12': '41.666667%',
          '6/12': '50%',
          '7/12': '58.333333%',
          '8/12': '66.666667%',
          '9/12': '75%',
          '10/12': '83.333333%',
          '11/12': '91.666667%',
          full: '100%',
          screen: '100vw',
          svw: '100svw',
          lvw: '100lvw',
          dvw: '100dvw',
          min: 'min-content',
          max: 'max-content',
          fit: 'fit-content',
        }),
        willChange: {
          auto: 'auto',
          scroll: 'scroll-position',
          contents: 'contents',
          transform: 'transform',
        },
        zIndex: {
          auto: 'auto',
          0: '0',
          10: '10',
          20: '20',
          30: '30',
          40: '40',
          50: '50',
        },
      },
      plugins: [],
    }
  



Back to Main Page