UI
recipes
<div class="demo">
  <button type="button" class="btn btn-neutral">Button</button>
  <button type="button" class="btn btn-outline-neutral">Button</button>
  <button type="button" class="btn btn-plain-neutral">Button</button>
  <button type="button" class="btn btn-neutral btn-icon">
    <svg
      xmlns="http://www.w3.org/2000/svg"
      width="20"
      height="20"
      viewBox="0 0 24 24"
      fill="none"
      stroke="currentColor"
      stroke-width="2"
      stroke-linecap="round"
      stroke-linejoin="round"
      class="lucide lucide-cookie"
    >
      <path d="M12 2a10 10 0 1 0 10 10 4 4 0 0 1-5-5 4 4 0 0 1-5-5" />
      <path d="M8.5 8.5v.01" />
      <path d="M16 15.5v.01" />
      <path d="M12 12v.01" />
      <path d="M11 17v.01" />
      <path d="M7 14v.01" />
    </svg>
  </button>
</div>
@import url("/support.css") layer(support);

@layer support, recipes;

@layer recipe {
  .btn {
    --_padding-inline: 0.75rem;
    --_padding-block: 0.375rem;
    --_font-size: 0.875rem;
    --_height: 2.25rem;

    cursor: pointer;
    user-select: none;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    text-align: center;
    text-decoration: none;

    min-height: var(--_height);
    padding-inline: var(--_padding-inline);
    padding-block: var(--_padding-block);
    gap: 0.375rem;
    font-size: var(--_font-size);
    font-weight: 600;
    line-height: 1.5;
    border-radius: var(--radius);

    border: 1px solid var(--_border-color);
    color: var(--_text);
    background-color: var(--_bg);

    &:not(:disabled):hover {
      color: var(--_hover-text);
      background-color: var(--_hover-bg);
      border-color: var(--_hover-border-color);
    }

    &:not(:disabled):active {
      color: var(--_active-text);
      background-color: var(--_active-bg);
      border-color: var(--_active-border-color);
    }

    &:disabled {
      opacity: 0.5;
      cursor: not-allowed;
    }
  }

  .btn-neutral {
    --_text: #fff;
    --_bg: oklch(from var(--neutral) 20% c h);
    --_border-color: transparent;
    --_hover-text: #fff;
    --_hover-bg: oklch(from var(--_bg) calc(l + 0.1) c h);
    --_hover-border-color: transparent;
    --_active-text: #fff;
    --_active-bg: oklch(from var(--_bg) calc(l + 0.15) c h);
    --_active-border-color: transparent;

    @container style(--theme: dark) {
      --_bg: var(--neutral);
      --_hover-bg: oklch(from var(--_bg) calc(l + 0.025) c h);
      --_active-bg: oklch(from var(--_bg) calc(l + 0.05) c h);
    }
  }

  .btn-outline-neutral {
    --_text: var(--text);
    --_bg: transparent;
    --_border-color: oklch(from var(--border) calc(l - 0.05) c h);
    --_hover-text: var(--_text);
    --_hover-bg: oklch(from var(--document) calc(l - 0.035) c h);
    --_hover-border-color: var(--_border-color);
    --_active-text: var(--_text);
    --_active-bg: oklch(from var(--document) calc(l - 0.055) c h);
    --_active-border-color: var(--_border-color);

    @container style(--theme: dark) {
      --_border-color: oklch(from var(--border) calc(l + 0.05) c h);
      --_hover-bg: oklch(from var(--document) calc(l + 0.05) c h);
      --_active-bg: oklch(from var(--document) calc(l + 0.075) c h);
    }

    box-shadow:
      rgba(0, 0, 0, 0) 0px 0px 0px 0px,
      rgba(0, 0, 0, 0) 0px 0px 0px 0px,
      rgba(0, 0, 0, 0.05) 0px 1px 2px 0px;
  }

  .btn-plain-neutral {
    --_text: var(--text);
    --_bg: transparent;
    --_border-color: transparent;
    --_hover-text: var(--_text);
    --_hover-bg: oklch(from var(--document) calc(l - 0.05) c h);
    --_hover-border-color: transparent;
    --_active-text: var(--_text);
    --_active-bg: oklch(from var(--document) calc(l - 0.075) c h);
    --_active-border-color: transparent;

    @container style(--theme: dark) {
      --_hover-bg: oklch(from var(--document) calc(l + 0.065) c h);
      --_active-bg: oklch(from var(--document) calc(l + 0.0875) c h);
    }
  }

  .btn-icon {
    --_padding-inline: 0;
    --_padding-block: 0;

    height: var(--_height);
    width: var(--_height);
  }
}

@layer support {
  .demo {
    height: 100%;
    display: flex;
    align-content: center;
    justify-content: center;
    flex-wrap: wrap;
    gap: 1rem;
  }
}