> ## Documentation Index
> Fetch the complete documentation index at: https://www.beeq.design/llms.txt
> Use this file to discover all available pages before exploring further.

# Card

> Cards are flexible containers that group related content and actions into a single scannable unit.

export const CodeLivePreview = ({code, children, height, removePadding = false, mode = 'shadow'}) => {
  const previewRef = useRef(null);
  const BEEQ_ESM_URL = 'https://esm.sh/@beeq/core/dist/beeq/beeq.esm.js';
  const BEEQ_CSS_URL = 'https://esm.sh/@beeq/core/dist/beeq/beeq.css';
  const BEEQ_ICONS_URL = 'https://esm.sh/@beeq/core/dist/beeq/svg';
  const ensureParentBeeqRuntime = () => {
    if (document.querySelector('script[data-beeq-parent-runtime]')) return;
    const script = document.createElement('script');
    script.type = 'module';
    script.src = BEEQ_ESM_URL;
    script.dataset.beeqParentRuntime = BEEQ_ICONS_URL;
    document.head.appendChild(script);
  };
  const executeSnippetScripts = (root, runtimeWindow, previewRootArg, skipAttr) => {
    root.querySelectorAll('script').forEach(oldScript => {
      if (skipAttr && oldScript.hasAttribute(skipAttr)) return;
      if (oldScript.src) {
        const newScript = runtimeWindow.document.createElement('script');
        newScript.src = oldScript.src;
        oldScript.replaceWith(newScript);
        return;
      }
      runtimeWindow.Function('previewRoot', oldScript.textContent || '')(previewRootArg);
      oldScript.remove();
    });
  };
  const syncIframeMode = iframeDoc => {
    const root = document.documentElement;
    const explicitMode = root.getAttribute('bq-mode');
    const isDark = root.classList.contains('dark');
    const resolvedMode = explicitMode || (isDark ? 'dark' : 'light');
    iframeDoc.documentElement.setAttribute('bq-mode', resolvedMode);
    iframeDoc.body.setAttribute('bq-mode', resolvedMode);
  };
  useEffect(() => {
    if (mode === 'shadow') ensureParentBeeqRuntime();
  }, [mode]);
  useEffect(() => {
    const container = previewRef.current;
    if (!container) return;
    if (removePadding) container.style.padding = '0';
    container.innerHTML = '';
    if (mode === 'iframe') {
      const iframe = document.createElement('iframe');
      iframe.className = 'preview-iframe';
      iframe.style.width = '100%';
      iframe.style.border = '0';
      iframe.style.display = 'block';
      iframe.style.minHeight = height ?? '0px';
      iframe.setAttribute('title', 'Live code preview');
      iframe.setAttribute('loading', 'lazy');
      iframe.setAttribute('sandbox', 'allow-scripts allow-same-origin');
      container.appendChild(iframe);
      const iframeDoc = iframe.contentDocument;
      const iframeWin = iframe.contentWindow;
      if (!iframeDoc || !iframeWin) return;
      iframeDoc.open();
      iframeDoc.write(['<!doctype html>', '<html>', '<head>', '  <meta charset="utf-8" />', '  <meta name="viewport" content="width=device-width, initial-scale=1" />', '  <style>html,body{margin:0;padding:0;min-height:100%;}</style>', `  <link rel="stylesheet" href="${BEEQ_CSS_URL}" />`, `  <script type="module" src="${BEEQ_ESM_URL}" data-beeq-iframe-runtime="${BEEQ_ICONS_URL}"></script>`, '</head>', '<body>', code, '</body>', '</html>'].join('\n'));
      iframeDoc.close();
      syncIframeMode(iframeDoc);
      const modeObserver = new MutationObserver(() => syncIframeMode(iframeDoc));
      modeObserver.observe(document.documentElement, {
        attributes: true,
        attributeFilter: ['class', 'bq-mode']
      });
      executeSnippetScripts(iframeDoc, iframeWin, iframeDoc, 'data-beeq-iframe-runtime');
      return () => modeObserver.disconnect();
    }
    const shadowRoot = container.shadowRoot ?? container.attachShadow({
      mode: 'open'
    });
    if (!shadowRoot.adoptedStyleSheets.length) {
      const fixSheet = new CSSStyleSheet();
      fixSheet.replaceSync(`
        bq-dropdown::part(panel),
        bq-panel::part(panel),
        bq-select::part(panel),
        bq-date-picker::part(panel) { z-index: 9999; }
        bq-tooltip::part(panel) { position: absolute; }
      `);
      shadowRoot.adoptedStyleSheets = [fixSheet];
    }
    shadowRoot.innerHTML = [`<link rel="stylesheet" href="${BEEQ_CSS_URL}">`, code].join('');
    executeSnippetScripts(shadowRoot, window, shadowRoot);
    return undefined;
  }, [code, mode, height]);
  return <div className="code-live-preview not-prose">
      {}
      <div className="preview" ref={previewRef} style={{
    minHeight: height
  }} />

      {}
      {children && <div className="code">{children}</div>}
    </div>;
};

export const CardTile = ({title, href, imageLightSrc, imageDarkSrc, children, enableImgZoom}) => {
  if (!href) {
    return <div className="card-tile block font-normal group relative my-2 ring-2 ring-transparent rounded-2xl overflow-hidden w-full">
        {imageLightSrc && <img className="w-full m-0 block dark:hidden" src={imageLightSrc} alt={title} {...enableImgZoom ? {
      zoom: true
    } : {
      noZoom: true
    }} />}
        {imageDarkSrc && <img className="w-full m-0 hidden dark:block" src={imageDarkSrc} alt={title} {...enableImgZoom ? {
      zoom: true
    } : {
      noZoom: true
    }} />}
        {title && <h2 className="mt-4 mb-2 px-6 text-base font-semibold">{title}</h2>}
        <div className="px-6 pb-5">{children}</div>
      </div>;
  }
  return <a href={href} className="card-tile block font-normal group relative my-2 ring-2 ring-transparent rounded-2xl overflow-hidden w-full cursor-pointer">
      {imageLightSrc && <img className="w-full m-0 block dark:hidden" src={imageLightSrc} alt={title} noZoom />}
      {imageDarkSrc && <img className="w-full m-0 hidden dark:block" src={imageDarkSrc} alt={title} noZoom />}
      {title && <h2 className="mt-4 mb-2 px-6 text-base font-semibold">{title}</h2>}
      <div className="px-6 pb-5">{children}</div>
    </a>;
};

<Frame className="px-4 py-4" caption="Card component overview">
  <img className="block dark:hidden" src="https://mintcdn.com/beeq/wg4EwK5G4l2plt8W/components/images/card/card-overview-light.svg?fit=max&auto=format&n=wg4EwK5G4l2plt8W&q=85&s=87cbd1550c852ac607db3f9885608747" alt="BEEQ Card component overview" width="648" height="487" data-path="components/images/card/card-overview-light.svg" />

  <img className="hidden dark:block" src="https://mintcdn.com/beeq/wg4EwK5G4l2plt8W/components/images/card/card-overview-dark.svg?fit=max&auto=format&n=wg4EwK5G4l2plt8W&q=85&s=26b04ba770497e9fa9618098df175997" alt="BEEQ Card component overview" width="648" height="487" data-path="components/images/card/card-overview-dark.svg" />
</Frame>

Cards group related content and actions into a single scannable surface. Use them to present highlights, supporting details, or compact summaries without forcing a rigid internal layout.

<Note>
  `bq-card` does not enforce an internal layout. **You decide how to structure the content inside** — this flexibility supports everything from simple text blocks to rich data displays with icons, metrics, and actions.
</Note>

## When to use

<CardGroup cols={2}>
  <Card>
    <span className="flex items-center mr-2 text-lg font-medium" role="heading">
      <Icon className="mr-2" icon="thumbs-up" iconType="solid" size={20} color="var(--bq-stroke--success)" />

      Use cards when
    </span>

    * You want to present concise information, actions, or collections of related content in a visually organized and scannable format
    * You need to highlight featured details, related content, or navigation options in a contained surface
    * The design benefits from a structured layout that helps users scan and compare grouped content
  </Card>

  <Card>
    <span className="flex items-center mr-2 text-lg font-medium" role="heading">
      <Icon className="mr-2" icon="thumbs-down" iconType="solid" size={20} color="var(--bq-stroke--danger)" />

      Do not use cards when
    </span>

    * You are presenting a single piece of information that does not need additional structure or supporting elements
    * The content is a deeply interactive workflow — a form, a wizard, or a data table — where a card would act as a passive wrapper around something that deserves its own full-page context
    * The design calls for a more fluid and continuous display instead of separated content blocks
  </Card>
</CardGroup>

## Card patterns

The Card pattern can support multiple presentation styles depending on the content you're presenting.

<CardGroup cols={3}>
  <Card title="Mini card">
    A compact layout for tight spaces — ideal for quick stats, summaries, or navigation links where a full-size card would feel heavy.
  </Card>

  <Card title="Card list">
    Multiple cards of the same type arranged in a grid or column — works well for scannable collections like articles, products, or team members.
  </Card>

  <Card title="Card with title and description">
    A structured card with a heading and supporting text — use when the card needs to explain something or guide users toward a next step.
  </Card>
</CardGroup>

## Anatomy

Cards are flexible containers, so their anatomy can vary depending on the content. In most cases, a card includes a container, an optional visual element, a content area, and optional supporting actions.

<Frame className="px-4 py-4" caption="Card component anatomy">
  <img className="block dark:hidden" src="https://mintlify.s3.us-west-1.amazonaws.com/beeq/components/images/card/card-anatomy-light.svg" alt="BEEQ Card component anatomy" />

  <img className="hidden dark:block" src="https://mintlify.s3.us-west-1.amazonaws.com/beeq/components/images/card/card-anatomy-dark.svg" alt="BEEQ Card component anatomy" />
</Frame>

| Part  | Element      | Description                                                                                   |
| ----- | ------------ | --------------------------------------------------------------------------------------------- |
| **1** | Container    | The outer surface that groups the content into a single, scannable unit                       |
| **2** | Visual       | An optional icon, image, or highlight area that helps users identify the card content quickly |
| **3** | Content area | The main body containing the title, description, metrics, or supporting text                  |
| **4** | Actions      | Optional buttons or links used when the card includes follow-up actions                       |

## Design guidelines

### Alignment

<CardGroup cols={2}>
  <CardTile title="Horizontal group (default)" imageLightSrc="/components/images/card/card-alignment-horizontal-light.svg" imageDarkSrc="/components/images/card/card-alignment-horizontal-dark.svg">
    Arrange cards side by side, flowing left to right. This is the default layout for card groups and works best when each card has a similar amount of content.
  </CardTile>

  <CardTile title="Stacked (narrow viewports)" imageLightSrc="/components/images/card/card-alignment-vertical-light.svg" imageDarkSrc="/components/images/card/card-alignment-vertical-dark.svg">
    When horizontal space is limited — narrow viewports or sidebars — the group should stack vertically. Keep card widths consistent within the group so users can scan without re-learning the layout on each item.
  </CardTile>
</CardGroup>

### Typography

Establish a clear hierarchy inside each card by following this order:

<Steps>
  <Step title="Primary value">
    Bold or larger text for the headline — a title, metric, or name. This is what users read first.
  </Step>

  <Step title="Supporting detail">
    Secondary-weight or muted text for context — a description, timestamp, or label.
  </Step>

  <Step title="Action">
    A brand-colored link or button at the bottom. Keep it to one primary action per card.
  </Step>
</Steps>

Avoid using more than two distinct text styles in a single card to keep the layout readable.

### States

<Note>
  `bq-card` has no built-in hover, active, or focus visual feedback — it is a static container by design. Interactive children such as buttons and links carry their own state styles. When a whole card represents a navigable destination, wrap it in a semantic `<a>` element rather than relying on a click handler on the card surface (see [Accessibility](#accessibility) for details).
</Note>

## Usage

The examples below show the most common card layouts, each with a live preview and code for HTML, React, Angular, and Vue.

### Default content

A card with icon, title, description, and a call-to-action — use when users need context before deciding to act.

<CodeLivePreview
  mode="shadow"
  code={`
<style>
.card--default {
  max-width: 24rem;
  width: 100%;

  &::part(wrapper) {
    display: flex;
    flex-direction: column;
    gap: var(--bq-spacing-m);
  }

  h6 {
    font-size: var(--bq-font-size--l);
    font-weight: var(--bq-font-weight--bold);
  }

  p {
    margin-block-start: var(--bq-spacing-m);
  }
}
</style>
<bq-card class="card--default">
<div class="header">
  <bq-icon color="text--brand" size="56" name="star-bold"></bq-icon>
</div>
<div class="body">
  <h6>Designing with Intelligence: The AI-Driven Future</h6>
  <p>
    Uncover the synergy between design and artificial intelligence, where smart algorithms enhance user interfaces. Discover how AI-driven insights, automation, and personalization...
  </p>
</div>
<div class="footer">
  <bq-button appearance="link">Read more...</bq-button>
</div>
</bq-card>
`}
>
  <CodeGroup>
    ```css styles.css icon="css" expandable theme={"theme":{"light":"one-light","dark":"night-owl"}}
    .card--default {
      max-width: 24rem;
      width: 100%;

      &::part(wrapper) {
        display: flex;
        flex-direction: column;
        gap: var(--bq-spacing-m);
      }

      h6 {
        font-size: var(--bq-font-size--l);
        font-weight: var(--bq-font-weight--bold);
      }

      p {
        margin-block-start: var(--bq-spacing-m);
      }
    }
    ```

    ```html HTML icon="html5" expandable theme={"theme":{"light":"one-light","dark":"night-owl"}}
    <bq-card class="card--default">
      <div class="header">
        <bq-icon color="text--brand" size="56" name="star-bold"></bq-icon>
      </div>
      <div class="body">
        <h6>Designing with Intelligence: The AI-Driven Future</h6>
        <p>
          Uncover the synergy between design and artificial intelligence, where smart algorithms enhance user interfaces. Discover how AI-driven insights, automation, and personalization...
        </p>
      </div>
      <div class="footer">
        <bq-button appearance="link">Read more...</bq-button>
      </div>
    </bq-card>
    ```

    ```jsx React icon="react" expandable theme={"theme":{"light":"one-light","dark":"night-owl"}}
    import { BqButton, BqCard, BqIcon } from "@beeq/react";
    import "./styles.css";

    <BqCard className="card--default">
      <div className="header">
        <BqIcon color="text--brand" size="56" name="star-bold" />
      </div>
      <div className="body">
        <h6>Designing with Intelligence: The AI-Driven Future</h6>
        <p>
          Uncover the synergy between design and artificial intelligence, where smart algorithms enhance user interfaces. Discover how AI-driven insights, automation, and personalization...
        </p>
      </div>
      <div className="footer">
        <BqButton appearance="link">Read more...</BqButton>
      </div>
    </BqCard>
    ```

    ```ts Angular icon="angular" expandable theme={"theme":{"light":"one-light","dark":"night-owl"}}
    import { Component } from "@angular/core";
    import { BqCard, BqIcon, BqButton } from "@beeq/angular/standalone";

    @Component({
      selector: "app-root",
      standalone: true,
      imports: [BqCard, BqIcon, BqButton],
      template: `
        <bq-card class="card--default">
          <div class="header">
            <bq-icon color="text--brand" size="56" name="star-bold"></bq-icon>
          </div>
          <div class="body">
            <h6>Designing with Intelligence: The AI-Driven Future</h6>
            <p>
              Uncover the synergy between design and artificial intelligence, where smart algorithms enhance user interfaces. Discover how AI-driven insights, automation, and personalization...
            </p>
          </div>
          <div class="footer">
            <bq-button appearance="link">Read more...</bq-button>
          </div>
        </bq-card>
      `,
      styles: [`
        .card--default {
          max-width: 24rem;
          width: 100%;

          &::part(wrapper) {
            display: flex;
            flex-direction: column;
            gap: var(--bq-spacing-m);
          }

          h6 {
            font-size: var(--bq-font-size--m);
            font-weight: var(--bq-font-weight--bold);
          }

          p {
            margin-block-start: var(--bq-spacing-m);
          }
        }
      `],
    })
    export class AppComponent {}
    ```

    ```vue Vue icon="vuejs" expandable theme={"theme":{"light":"one-light","dark":"night-owl"}}
    <script setup lang="ts">
    import { BqButton, BqCard, BqIcon } from "@beeq/vue";
    </script>

    <template>
      <BqCard class="card--default">
        <div class="header">
          <BqIcon color="text--brand" size="56" name="star-bold" />
        </div>
        <div class="body">
          <h6>Designing with Intelligence: The AI-Driven Future</h6>
          <p>
            Uncover the synergy between design and artificial intelligence, where smart algorithms enhance user interfaces. Discover how AI-driven insights, automation, and personalization...
          </p>
        </div>
        <div class="footer">
          <BqButton appearance="link">Read more...</BqButton>
        </div>
      </BqCard>
    </template>


    <style>
      .card--default {
        max-width: 24rem;
        width: 100%;

        &::part(wrapper) {
          display: flex;
          flex-direction: column;
          gap: var(--bq-spacing-m);
        }

        h6 {
          font-size: var(--bq-font-size--m);
          font-weight: var(--bq-font-weight--bold);
        }

        p {
          margin-block-start: var(--bq-spacing-m);
        }
      }
    </style>
    ```
  </CodeGroup>
</CodeLivePreview>

### Card list

Use a card list when you have a collection of items that share the same structure — product catalogs, article feeds, team directories. The repeated layout helps users scan and compare entries quickly without having to re-learn the pattern on each card.

<CodeLivePreview
  mode="shadow"
  code={`
<style>
.card--highlights {
  width: 100%;
  max-width: 24rem;

  &::part(wrapper) {
    display: flex;
    flex-direction: column;
    gap: var(--bq-spacing-m);
  }

  & h6 {
    font-size: var(--bq-font-size--l);
    font-weight: var(--bq-font-weight--bold);
  }

  & section {
    display: flex;
    flex-direction: column;
    gap: var(--bq-spacing-s);

    & .item {
      display: flex;
      gap: var(--bq-spacing-s);
    }
  }
}
</style>
<bq-card class="card--highlights">
<h6>Title</h6>
<section>
  <div class="item">
    <bq-icon name="star-bold"></bq-icon>
    Lorem Ipsum is simply dummy text
  </div>
  <div class="item">
    <bq-icon name="star-bold"></bq-icon>
    Lorem Ipsum is simply dummy text
  </div>
  <div class="item">
    <bq-icon name="star-bold"></bq-icon>
    Lorem Ipsum is simply dummy text
  </div>
  <div class="item">
    <bq-icon name="star-bold"></bq-icon>
    Lorem Ipsum is simply dummy text
  </div>
</section>
</bq-card>
`}
>
  <CodeGroup>
    ```css styles.css icon="css" expandable theme={"theme":{"light":"one-light","dark":"night-owl"}}
    .card--highlights {
      width: 100%;
      max-width: 24rem;

      &::part(wrapper) {
        display: flex;
        flex-direction: column;
        gap: var(--bq-spacing-m);
      }

      & h6 {
        font-size: var(--bq-font-size--l);
        font-weight: var(--bq-font-weight--bold);
      }

      & section {
        display: flex;
        flex-direction: column;
        gap: var(--bq-spacing-s);

        & .item {
          display: flex;
          gap: var(--bq-spacing-s);
        }
      }
    }
    ```

    ```html HTML icon="html5" expandable theme={"theme":{"light":"one-light","dark":"night-owl"}}
    <bq-card class="card--highlights">
      <h6>Title</h6>
      <section>
        <div class="item">
          <bq-icon name="star-bold"></bq-icon>
          Lorem Ipsum is simply dummy text
        </div>
        <div class="item">
          <bq-icon name="star-bold"></bq-icon>
          Lorem Ipsum is simply dummy text
        </div>
        <div class="item">
          <bq-icon name="star-bold"></bq-icon>
          Lorem Ipsum is simply dummy text
        </div>
        <div class="item">
          <bq-icon name="star-bold"></bq-icon>
          Lorem Ipsum is simply dummy text
        </div>
      </section>
    </bq-card>
    ```

    ```jsx React icon="react" expandable theme={"theme":{"light":"one-light","dark":"night-owl"}}
    import { BqCard, BqIcon } from "@beeq/react";
    import "./styles.css";

    <BqCard className="card--highlights">
      <h6>Title</h6>
      <section>
        <div className="item">
          <BqIcon name="star-bold" />
          Lorem Ipsum is simply dummy text
        </div>
        <div className="item">
          <BqIcon name="star-bold" />
          Lorem Ipsum is simply dummy text
        </div>
        <div className="item">
          <BqIcon name="star-bold" />
          Lorem Ipsum is simply dummy text
        </div>
        <div className="item">
          <BqIcon name="star-bold" />
          Lorem Ipsum is simply dummy text
        </div>
      </section>
    </BqCard>
    ```

    ```ts Angular icon="angular" expandable theme={"theme":{"light":"one-light","dark":"night-owl"}}
    import { Component } from "@angular/core";
    import { BqCard, BqIcon } from "@beeq/angular/standalone";

    @Component({
      selector: "app-root",
      standalone: true,
      imports: [BqCard, BqIcon],
      template: `
        <bq-card class="card--highlights">
          <h6>Title</h6>
          <section>
            <div class="item">
              <bq-icon name="star-bold"></bq-icon>
              Lorem Ipsum is simply dummy text
            </div>
            <div class="item">
              <bq-icon name="star-bold"></bq-icon>
              Lorem Ipsum is simply dummy text
            </div>
            <div class="item">
              <bq-icon name="star-bold"></bq-icon>
              Lorem Ipsum is simply dummy text
            </div>
            <div class="item">
              <bq-icon name="star-bold"></bq-icon>
              Lorem Ipsum is simply dummy text
            </div>
          </section>
        </bq-card>
      `,
      styles: [`
        .card--highlights {
          width: 100%;
          max-width: 24rem;

          &::part(wrapper) {
            display: flex;
            flex-direction: column;
            gap: var(--bq-spacing-m);
          }

          & h6 {
            font-size: var(--bq-font-size--l);
            font-weight: var(--bq-font-weight--bold);
          }

          & section {
            display: flex;
            flex-direction: column;
            gap: var(--bq-spacing-s);

            & .item {
              display: flex;
              gap: var(--bq-spacing-s);
            }
          }
        }
      `],
    })
    export class AppComponent {}
    ```

    ```vue Vue icon="vuejs" expandable theme={"theme":{"light":"one-light","dark":"night-owl"}}
    <script setup lang="ts">
    import { BqCard, BqIcon } from "@beeq/vue";
    </script>

    <template>
      <BqCard class="card--highlights">
        <h6>Title</h6>
        <section>
          <div class="item">
            <BqIcon name="star-bold" />
            Lorem Ipsum is simply dummy text
          </div>
          <div class="item">
            <BqIcon name="star-bold" />
            Lorem Ipsum is simply dummy text
          </div>
          <div class="item">
            <BqIcon name="star-bold" />
            Lorem Ipsum is simply dummy text
          </div>
          <div class="item">
            <BqIcon name="star-bold" />
            Lorem Ipsum is simply dummy text
          </div>
        </section>
      </BqCard>
    </template>


    <style>
      .card--highlights {
        width: 100%;
        max-width: 24rem;

        &::part(wrapper) {
          display: flex;
          flex-direction: column;
          gap: var(--bq-spacing-m);
        }

        & h6 {
          font-size: var(--bq-font-size--l);
          font-weight: var(--bq-font-weight--bold);
        }

        & section {
          display: flex;
          flex-direction: column;
          gap: var(--bq-spacing-s);

          & .item {
            display: flex;
            gap: var(--bq-spacing-s);
          }
        }
      }
    </style>
    ```
  </CodeGroup>
</CodeLivePreview>

### Performance overview

A KPI card combining an icon, headline value, and trend indicator — ideal for analytics dashboards and executive reports.

<CodeLivePreview
  mode="shadow"
  code={`
<style>
.card--overview {
  width: 100%;
  max-width: 24rem;

  &::part(wrapper) {
    display: flex;
    gap: var(--bq-spacing-m);
  }

  & h4 {
    font-size: var(--bq-font-size--xxl);
  }

  & .card--body {
    display: flex;
    flex-direction: column;
    gap: var(--bq-spacing-xs2);
  }

  & .body__top {
    display: flex;
    align-items: center;
    gap: var(--bq-spacing-xs2);
  }

  & .body__bottom {
    display: flex;
    align-items: flex-end;
    gap: var(--bq-spacing-xs);
  }

  & .text-secondary {
    color: var(--bq-text--secondary);
  }

  & .text-success {
    color: var(--bq-text--success);
  }
}
</style>
<bq-card class="card--overview">
<div class="card-thumbnail">
  <bq-icon color="text--brand" size="56" name="star-bold"></bq-icon>
</div>
<div class="card--body">
  <div class="body__top">
    <span class="text-secondary">Title</span>
    <bq-icon color="text--brand" size="16" name="star-bold"></bq-icon>
  </div>
  <div class="body__bottom">
    <h4>194</h4>
    <span class="text-success">+24%</span>
    <span class="text-secondary">than last mo.</span>
  </div>
</div>
</bq-card>
`}
>
  <CodeGroup>
    ```css styles.css icon="css" expandable theme={"theme":{"light":"one-light","dark":"night-owl"}}
    .card--overview {
      width: 100%;
      max-width: 24rem;

      &::part(wrapper) {
        display: flex;
        gap: var(--bq-spacing-m);
      }

      & h4 {
        font-size: var(--bq-font-size--xxl);
      }

      & .card--body {
        display: flex;
        flex-direction: column;
        gap: var(--bq-spacing-xs2);
      }

      & .body__top {
        display: flex;
        align-items: center;
        gap: var(--bq-spacing-xs2);
      }

      & .body__bottom {
        display: flex;
        align-items: flex-end;
        gap: var(--bq-spacing-xs);
      }

      & .text-secondary {
        color: var(--bq-text--secondary);
      }

      & .text-success {
        color: var(--bq-text--success);
      }
    }
    ```

    ```html HTML icon="html5" expandable theme={"theme":{"light":"one-light","dark":"night-owl"}}
    <bq-card class="card--overview">
      <div class="card-thumbnail">
        <bq-icon color="text--brand" size="56" name="star-bold"></bq-icon>
      </div>
      <div class="card--body">
        <div class="body__top">
          <span class="text-secondary">Title</span>
          <bq-icon color="text--brand" size="16" name="star-bold"></bq-icon>
        </div>
        <div class="body__bottom">
          <h4>194</h4>
          <span class="text-success">+24%</span>
          <span class="text-secondary">than last mo.</span>
        </div>
      </div>
    </bq-card>
    ```

    ```jsx React icon="react" expandable theme={"theme":{"light":"one-light","dark":"night-owl"}}
    import { BqCard, BqIcon } from "@beeq/react";
    import "./styles.css";

    <BqCard className="card--overview">
      <div className="card-thumbnail">
        <BqIcon color="text--brand" size="56" name="star-bold" />
      </div>
      <div className="card--body">
        <div className="body__top">
          <span className="text-secondary">Title</span>
          <BqIcon color="text--brand" size="16" name="star-bold" />
        </div>
        <div className="body__bottom">
          <h4>194</h4>
          <span className="text-success">+24%</span>
          <span className="text-secondary">than last mo.</span>
        </div>
      </div>
    </BqCard>
    ```

    ```ts Angular icon="angular" expandable theme={"theme":{"light":"one-light","dark":"night-owl"}}
    import { Component } from "@angular/core";
    import { BqCard, BqIcon } from "@beeq/angular/standalone";

    @Component({
      selector: "app-root",
      standalone: true,
      imports: [BqCard, BqIcon],
      template: `
        <bq-card class="card--overview">
          <div class="card-thumbnail">
            <bq-icon color="text--brand" size="56" name="star-bold"></bq-icon>
          </div>
          <div class="card--body">
            <div class="body__top">
              <span class="text-secondary">Title</span>
              <bq-icon color="text--brand" size="16" name="star-bold"></bq-icon>
            </div>
            <div class="body__bottom">
              <h4>194</h4>
              <span class="text-success">+24%</span>
              <span class="text-secondary">than last mo.</span>
            </div>
          </div>
        </bq-card>
      `,
      styles: [`
        .card--overview {
          width: 100%;
          max-width: 24rem;

          &::part(wrapper) {
            display: flex;
            gap: var(--bq-spacing-m);
          }

          & h4 {
            font-size: var(--bq-font-size--xxl);
          }

          & .card--body {
            display: flex;
            flex-direction: column;
            gap: var(--bq-spacing-xs2);
          }

          & .body__top {
            display: flex;
            align-items: center;
            gap: var(--bq-spacing-xs2);
          }

          & .body__bottom {
            display: flex;
            align-items: flex-end;
            gap: var(--bq-spacing-xs);
          }

          & .text-secondary {
            color: var(--bq-text--secondary);
          }

          & .text-success {
            color: var(--bq-text--success);
          }
        }
      `],
    })
    export class AppComponent {}
    ```

    ```vue Vue icon="vuejs" expandable theme={"theme":{"light":"one-light","dark":"night-owl"}}
    <script setup lang="ts">
    import { BqCard, BqIcon } from "@beeq/vue";
    </script>

    <template>
      <BqCard class="card--overview">
        <div class="card-thumbnail">
          <BqIcon color="text--brand" size="56" name="star-bold" />
        </div>
        <div class="card--body">
          <div class="body__top">
            <span class="text-secondary">Title</span>
            <BqIcon color="text--brand" size="16" name="star-bold" />
          </div>
          <div class="body__bottom">
            <h4>194</h4>
            <span class="text-success">+24%</span>
            <span class="text-secondary">than last mo.</span>
          </div>
        </div>
      </BqCard>
    </template>


    <style>
      .card--overview {
        width: 100%;
        max-width: 24rem;

        &::part(wrapper) {
          display: flex;
          gap: var(--bq-spacing-m);
        }

        & h4 {
          font-size: var(--bq-font-size--xxl);
        }

        & .card--body {
          display: flex;
          flex-direction: column;
          gap: var(--bq-spacing-xs2);
        }

        & .body__top {
          display: flex;
          align-items: center;
          gap: var(--bq-spacing-xs2);
        }

        & .body__bottom {
          display: flex;
          align-items: flex-end;
          gap: var(--bq-spacing-xs);
        }

        & .text-secondary {
          color: var(--bq-text--secondary);
        }

        & .text-success {
          color: var(--bq-text--success);
        }
      }
    </style>
    ```
  </CodeGroup>
</CodeLivePreview>

### Mini card

A compact horizontal card using `type="minimal"` that removes built-in padding, letting you create visually distinct inner zones — like the branded left panel shown here.

<CodeLivePreview
  mode="shadow"
  code={`
<style>
.card--mini {
  width: 100%;
  max-width: 24rem;

  &::part(wrapper) {
    display: flex;
    overflow: clip;
  }

  & .content--start {
    display: flex;
    align-items: center;
    padding: var(--bq-spacing-l);
    background-color: var(--bq-background--brand);
  }

  & .content--end {
    display: flex;
    flex: 1;
    align-items: center;
    justify-content: space-between;
    padding: var(--bq-card--paddingMinimal);
  }

  & .body {
    display: flex;
    flex-direction: column;
    padding-left: 0.5rem;
  }

  & h6 {
    font-size: var(--bq-font-size--m);
    font-weight: var(--bq-font-weight--medium);
  }

  & p {
    font-size: var(--bq-font-size--xs);
    color: var(--bq-text--secondary);
  }

  & .decorator {
    padding: var(--bq-card--paddingMinimal);
  }
}
</style>
<bq-card type="minimal" class="card--mini">
<div class="content--start">
  <bq-icon color="text--alt" name="graduation-cap-bold"></bq-icon>
</div>
<div class="content--end">
  <div class="body">
    <h6>Disciplines</h6>
    <p>Explore the extensive range of disciplines available at our university.</p>
  </div>
  <div class="decorator">
    <bq-icon color="text--brand" name="arrow-square-out"></bq-icon>
  </div>
</div>
</bq-card>
`}
>
  <CodeGroup>
    ```css styles.css icon="css" expandable theme={"theme":{"light":"one-light","dark":"night-owl"}}
    .card--mini {
      width: 100%;
      max-width: 24rem;

      &::part(wrapper) {
        display: flex;
        overflow: clip;
      }

      & .content--start {
        display: flex;
        align-items: center;
        padding: var(--bq-spacing-l);
        background-color: var(--bq-background--brand);
      }

      & .content--end {
        display: flex;
        flex: 1;
        align-items: center;
        justify-content: space-between;
        padding: var(--bq-card--paddingMinimal);
      }

      & .body {
        display: flex;
        flex-direction: column;
        padding-left: 0.5rem;
      }

      & h6 {
        font-size: var(--bq-font-size--m);
        font-weight: var(--bq-font-weight--medium);
      }

      & p {
        font-size: var(--bq-font-size--xs);
        color: var(--bq-text--secondary);
      }

      & .decorator {
        padding: var(--bq-card--paddingMinimal);
      }
    }
    ```

    ```html HTML icon="html5" expandable theme={"theme":{"light":"one-light","dark":"night-owl"}}
    <bq-card type="minimal" class="card--mini">
      <div class="content--start">
        <bq-icon color="text--alt" name="graduation-cap-bold"></bq-icon>
      </div>
      <div class="content--end">
        <div class="body">
          <h6>Disciplines</h6>
          <p>Explore the extensive range of disciplines available at our university.</p>
        </div>
        <div class="decorator">
          <bq-icon color="text--brand" name="arrow-square-out"></bq-icon>
        </div>
      </div>
    </bq-card>
    ```

    ```jsx React icon="react" expandable theme={"theme":{"light":"one-light","dark":"night-owl"}}
    import { BqCard, BqIcon } from "@beeq/react";
    import "./styles.css";

    <BqCard type="minimal" className="card--mini">
      <div className="content--start">
        <BqIcon color="text--alt" name="graduation-cap-bold" />
      </div>
      <div className="content--end">
        <div className="body">
          <h6>Title</h6>
          <p>description</p>
        </div>
        <div className="decorator">
          <BqIcon color="text--brand" name="arrow-square-out" />
        </div>
      </div>
    </BqCard>
    ```

    ```ts Angular icon="angular" expandable theme={"theme":{"light":"one-light","dark":"night-owl"}}
    import { Component } from "@angular/core";
    import { BqCard, BqIcon } from "@beeq/angular/standalone";

    @Component({
      selector: "app-root",
      standalone: true,
      imports: [BqCard, BqIcon],
      template: `
        <bq-card type="minimal" class="card--mini">
          <div class="content--start">
            <bq-icon color="text--alt" name="graduation-cap-bold"></bq-icon>
          </div>
          <div class="content--end">
            <div class="body">
              <h6>Disciplines</h6>
              <p>Explore the extensive range of disciplines available at our university.</p>
            </div>
            <div class="decorator">
              <bq-icon color="text--brand" name="arrow-square-out"></bq-icon>
            </div>
          </div>
        </bq-card>
      `,
      styles: [`
        .card--mini {
          width: 100%;
          max-width: 24rem;

          &::part(wrapper) {
            display: flex;
            overflow: clip;
          }

          & .content--start {
            display: flex;
            align-items: center;
            padding: var(--bq-spacing-l);
            background-color: var(--bq-background--brand);
          }

          & .content--end {
            display: flex;
            flex: 1;
            align-items: center;
            justify-content: space-between;
            padding: var(--bq-card--paddingMinimal);
          }

          & .body {
            display: flex;
            flex-direction: column;
            padding-left: 0.5rem;
          }

          & h6 {
            font-size: var(--bq-font-size--m);
            font-weight: var(--bq-font-weight--medium);
          }

          & p {
            font-size: var(--bq-font-size--xs);
            color: var(--bq-text--secondary);
          }

          & .decorator {
            padding: var(--bq-card--paddingMinimal);
          }
        }
      `],
    })
    export class AppComponent {}
    ```

    ```vue Vue icon="vuejs" expandable theme={"theme":{"light":"one-light","dark":"night-owl"}}
    <script setup lang="ts">
    import { BqCard, BqIcon } from "@beeq/vue";
    </script>

    <template>
      <BqCard type="minimal" class="card--mini">
        <div class="content--start">
          <BqIcon color="text--alt" name="graduation-cap-bold" />
        </div>
        <div class="content--end">
          <div class="body">
            <h6>Disciplines</h6>
            <p>Explore the extensive range of disciplines available at our university.</p>
          </div>
          <div class="decorator">
            <BqIcon color="text--brand" name="arrow-square-out" />
          </div>
        </div>
      </BqCard>
    </template>


    <style>
      .card--mini {
        width: 100%;
        max-width: 24rem;

        &::part(wrapper) {
          display: flex;
          overflow: clip;
        }

        & .content--start {
          display: flex;
          align-items: center;
          padding: var(--bq-spacing-l);
          background-color: var(--bq-background--brand);
        }

        & .content--end {
          display: flex;
          flex: 1;
          align-items: center;
          justify-content: space-between;
          padding: var(--bq-card--paddingMinimal);
        }

        & .body {
          display: flex;
          flex-direction: column;
          padding-left: 0.5rem;
        }

        & h6 {
          font-size: var(--bq-font-size--m);
          font-weight: var(--bq-font-weight--medium);
        }

        & p {
          font-size: var(--bq-font-size--xs);
          color: var(--bq-text--secondary);
        }

        & .decorator {
          padding: var(--bq-card--paddingMinimal);
        }
      }
    </style>
    ```
  </CodeGroup>
</CodeLivePreview>

## Options

### Types

`type` is a layout decision that controls whether the card applies its own internal padding or leaves spacing entirely up to you.

| Type        | Padding                          | When to use                                                                                          |
| ----------- | -------------------------------- | ---------------------------------------------------------------------------------------------------- |
| **default** | Built-in (`var(--bq-spacing-l)`) | Most cards — content sits comfortably inside without extra wrapper elements                          |
| **minimal** | None                             | When you need full control over inner layout, such as a branded color block flush with the card edge |

<Tip>
  Reach for `type="minimal"` only when your design requires content to bleed to the card edge. For everything else, `default` keeps spacing consistent automatically.
</Tip>

<CodeLivePreview
  mode="shadow"
  code={`
<style>
.card--types {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(12rem, 1fr));
  gap: var(--bq-spacing-m);
}
</style>
<div class="card--types">
<bq-card type="default">
  <p>Default — built-in padding applied automatically</p>
</bq-card>
<bq-card type="minimal">
  <p>Minimal — no padding, you control the spacing</p>
</bq-card>
</div>
`}
>
  <CodeGroup>
    ```html HTML icon="html5" expandable theme={"theme":{"light":"one-light","dark":"night-owl"}}
    <div class="type-grid">
      <bq-card type="default">
        <p>Default — built-in padding applied automatically</p>
      </bq-card>
      <bq-card type="minimal">
        <p>Minimal — no padding, you control the spacing</p>
      </bq-card>
    </div>
    ```

    ```jsx React icon="react" expandable theme={"theme":{"light":"one-light","dark":"night-owl"}}
    import { BqCard } from "@beeq/react";

    <div className="type-grid">
      <BqCard type="default">
        <p>Default — built-in padding applied automatically</p>
      </BqCard>
      <BqCard type="minimal">
        <p>Minimal — no padding, you control the spacing</p>
      </BqCard>
    </div>
    ```

    ```ts Angular icon="angular" expandable theme={"theme":{"light":"one-light","dark":"night-owl"}}
    import { Component } from "@angular/core";
    import { BqCard } from "@beeq/angular/standalone";

    @Component({
      selector: "app-root",
      standalone: true,
      imports: [BqCard],
      template: `
        <div class="type-grid">
          <bq-card type="default">
            <p>Default — built-in padding applied automatically</p>
          </bq-card>
          <bq-card type="minimal">
            <p>Minimal — no padding, you control the spacing</p>
          </bq-card>
        </div>
      `,
    })
    export class AppComponent {}
    ```

    ```vue Vue icon="vuejs" expandable theme={"theme":{"light":"one-light","dark":"night-owl"}}
    <script setup lang="ts">
    import { BqCard } from "@beeq/vue";
    </script>

    <template>
      <div class="type-grid">
        <BqCard type="default">
          <p>Default — built-in padding applied automatically</p>
        </BqCard>
        <BqCard type="minimal">
          <p>Minimal — no padding, you control the spacing</p>
        </BqCard>
      </div>
    </template>
    ```
  </CodeGroup>
</CodeLivePreview>

### Border radius

Use the `border` property to control the card corner radius.

<CodeLivePreview
  mode="shadow"
  code={`
<style>
.card--borders {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(20rem, 1fr));
  gap: var(--bq-spacing-m);

  & bq-card {
    width: 100%;

    &::part(wrapper) {
      display: flex;
      align-items: center;
      justify-content: center;
    }

    & span {
      font-size: var(--bq-font-size--s);
      color: var(--bq-text--secondary);
    }
  }
}
</style>
<div class="card--borders">
<bq-card border="none">
  <span>border="none"</span>
</bq-card>
<bq-card border="xs2">
  <span>border="xs2"</span>
</bq-card>
<bq-card border="xs">
  <span>border="xs"</span>
</bq-card>
<bq-card border="s">
  <span>border="s"</span>
</bq-card>
<bq-card border="m">
  <span>border="m"</span>
</bq-card>
<bq-card border="l">
  <span>border="l"</span>
</bq-card>
<bq-card border="full">
  <span>border="full"</span>
</bq-card>
</div>
`}
>
  <CodeGroup>
    ```html HTML icon="html5" expandable theme={"theme":{"light":"one-light","dark":"night-owl"}}
    <bq-card border="none">
      <span>border="none"</span>
    </bq-card>
    <bq-card border="xs2">
      <span>border="xs2"</span>
    </bq-card>
    <bq-card border="xs">
      <span>border="xs"</span>
    </bq-card>
    <bq-card border="s">
      <span>border="s"</span>
    </bq-card>
    <bq-card border="m">
      <span>border="m"</span>
    </bq-card>
    <bq-card border="l">
      <span>border="l"</span>
    </bq-card>
    <bq-card border="full">
      <span>border="full"</span>
    </bq-card>
    ```

    ```jsx React icon="react" expandable theme={"theme":{"light":"one-light","dark":"night-owl"}}
    import { BqCard } from "@beeq/react";
    import "./styles.css";

    <BqCard border="none">
      <span>border="none"</span>
    </BqCard>
    <BqCard border="xs2">
      <span>border="xs2"</span>
    </BqCard>
    <BqCard border="xs">
      <span>border="xs"</span>
    </BqCard>
    <BqCard border="s">
      <span>border="s"</span>
    </BqCard>
    <BqCard border="m">
      <span>border="m"</span>
    </BqCard>
    <BqCard border="l">
      <span>border="l"</span>
    </BqCard>
    <BqCard border="full">
      <span>border="full"</span>
    </BqCard>
    ```

    ```ts Angular icon="angular" expandable theme={"theme":{"light":"one-light","dark":"night-owl"}}
    import { Component } from "@angular/core";
    import { BqCard } from "@beeq/angular/standalone";

    @Component({
      selector: "app-root",
      standalone: true,
      imports: [BqCard],
      template: `
        <bq-card border="none">
          <span>border="none"</span>
        </bq-card>
        <bq-card border="xs2">
          <span>border="xs2"</span>
        </bq-card>
        <bq-card border="xs">
          <span>border="xs"</span>
        </bq-card>
        <bq-card border="s">
          <span>border="s"</span>
        </bq-card>
        <bq-card border="m">
          <span>border="m"</span>
        </bq-card>
        <bq-card border="l">
          <span>border="l"</span>
        </bq-card>
        <bq-card border="full">
          <span>border="full"</span>
        </bq-card>
      `,
    })
    export class AppComponent {}
    ```

    ```vue Vue icon="vuejs" expandable theme={"theme":{"light":"one-light","dark":"night-owl"}}
    <script setup lang="ts">
    import { BqCard } from "@beeq/vue";
    </script>

    <template>
      <BqCard border="none">
        <span>border="none"</span>
      </BqCard>
      <BqCard border="xs2">
        <span>border="xs2"</span>
      </BqCard>
      <BqCard border="xs">
        <span>border="xs"</span>
      </BqCard>
      <BqCard border="s">
        <span>border="s"</span>
      </BqCard>
      <BqCard border="m">
        <span>border="m"</span>
      </BqCard>
      <BqCard border="l">
        <span>border="l"</span>
      </BqCard>
      <BqCard border="full">
        <span>border="full"</span>
      </BqCard>
    </template>
    ```
  </CodeGroup>
</CodeLivePreview>

<Tip>
  Use `--bq-card--borderColor`, `--bq-card--borderStyle`, and `--bq-card--borderWidth` together on the `wrapper` shadow part to add a visible card border. By default, all three resolve to values that produce no visible border.
</Tip>

## Best practices

<CardGroup cols={2}>
  <Card>
    <span className="flex items-center mr-2 text-lg font-medium" role="heading">
      <Icon className="mr-2" icon="check" iconType="solid" size={20} color="var(--bq-stroke--success)" />

      Do
    </span>

    Keep cards within the same group visually consistent — same size, same internal layout — so users can scan and compare them quickly.
  </Card>

  <Card>
    <span className="flex items-center mr-2 text-lg font-medium" role="heading">
      <Icon className="mr-2" icon="xmark" iconType="solid" size={20} color="var(--bq-stroke--danger)" />

      Don't
    </span>

    Mix unrelated card layouts in the same group when users are expected to compare items — inconsistency makes scanning harder.
  </Card>

  <Card>
    <span className="flex items-center mr-2 text-lg font-medium" role="heading">
      <Icon className="mr-2" icon="check" iconType="solid" size={20} color="var(--bq-stroke--success)" />

      Do
    </span>

    Limit each card to one primary topic or action. If a card is trying to do too much, consider splitting the content or using a dedicated page.
  </Card>

  <Card>
    <span className="flex items-center mr-2 text-lg font-medium" role="heading">
      <Icon className="mr-2" icon="xmark" iconType="solid" size={20} color="var(--bq-stroke--danger)" />

      Don't
    </span>

    Overload a card with long descriptions or multiple unrelated actions — if the content needs more room, a dedicated page or panel is a better fit.
  </Card>

  <Card>
    <span className="flex items-center mr-2 text-lg font-medium" role="heading">
      <Icon className="mr-2" icon="check" iconType="solid" size={20} color="var(--bq-stroke--success)" />

      Do
    </span>

    Lead with the most important information. Place the primary value — a number, a name, or a status — at the top so users see it at a glance before reading further.
  </Card>

  <Card>
    <span className="flex items-center mr-2 text-lg font-medium" role="heading">
      <Icon className="mr-2" icon="xmark" iconType="solid" size={20} color="var(--bq-stroke--danger)" />

      Don't
    </span>

    Nest cards inside other cards. It creates visual confusion and makes hierarchy hard to follow — use a different layout pattern instead.
  </Card>

  <Card>
    <span className="flex items-center mr-2 text-lg font-medium" role="heading">
      <Icon className="mr-2" icon="check" iconType="solid" size={20} color="var(--bq-stroke--success)" />

      Do
    </span>

    Choose icons that match the card's content — a wallet for finance, a chart for analytics. Users should be able to identify the card's purpose from the icon at a glance.
  </Card>

  <Card>
    <span className="flex items-center mr-2 text-lg font-medium" role="heading">
      <Icon className="mr-2" icon="xmark" iconType="solid" size={20} color="var(--bq-stroke--danger)" />

      Don't
    </span>

    Use icons as pure decoration. An icon that has no connection to the card's content adds visual noise without adding meaning.
  </Card>
</CardGroup>

## Accessibility

* **Images** — provide descriptive `alt` text for any images inside a card so screen readers can convey what the image shows.
* **Headings** — use a proper heading hierarchy within the card so assistive technologies can navigate the content structure correctly.
* **Keyboard navigation** — ensure all interactive elements inside a card (buttons, links) are reachable and operable with the keyboard alone.
* **Color contrast** — maintain sufficient contrast between the card background, text, and UI elements so content remains readable for all users.

### Navigation

When a card represents a link destination (for example, an article or product), wrap it in a semantic `<a>` element. `bq-card` is a non-interactive container and does not handle click or keyboard events on its own.

<CodeLivePreview
  mode="shadow"
  code={`
<style>
.card-link {
  border-radius: var(--bq-radius--m);
  text-decoration: none;
  cursor: pointer;

  &:hover {
    & .card--mini::part(wrapper) {
      transform: translateY(-2px);
      box-shadow: var(--bq-box-shadow--m);
    }
  }

  &:focus-visible {
    outline-offset: 2px;
    outline: 2px solid var(--bq-focus);
  }

  .card--mini {
    width: 100%;
    max-width: 24rem;

    &::part(wrapper) {
      display: flex;
      overflow: clip;
      transition: box-shadow 0.2s ease-in-out, transform 0.2s ease-in-out;
    }

    & .content--start {
      display: flex;
      align-items: center;
      padding: var(--bq-spacing-l);
      background-color: var(--bq-background--brand);
    }

    & .content--end {
      display: flex;
      flex: 1;
      align-items: center;
      justify-content: space-between;
      padding: var(--bq-card--paddingMinimal);
    }

    & .body {
      display: flex;
      flex-direction: column;
      padding-left: 0.5rem;
    }

    & h6 {
      font-size: var(--bq-font-size--m);
      font-weight: var(--bq-font-weight--medium);
    }

    & p {
      font-size: var(--bq-font-size--xs);
      color: var(--bq-text--secondary);
    }

    & .decorator {
      padding: var(--bq-card--paddingMinimal);
    }
  }

}
</style>
<a href="https://example.com/article" class="card-link">
<bq-card type="minimal" class="card--mini">
  <div class="content--start">
    <bq-icon color="text--alt" name="graduation-cap-bold"></bq-icon>
  </div>
  <div class="content--end">
    <div class="body">
      <h6>Disciplines</h6>
      <p>Explore the extensive range of disciplines available at our university.</p>
    </div>
    <div class="decorator">
      <bq-icon color="text--brand" name="arrow-square-out"></bq-icon>
    </div>
  </div>
</bq-card>
</a>
`}
>
  <CodeGroup>
    ```css styles.css icon="css" expandable theme={"theme":{"light":"one-light","dark":"night-owl"}}
    .card-link {
      border-radius: var(--bq-radius--m);
      text-decoration: none;
      cursor: pointer;

      &:hover {
        & .card--mini::part(wrapper) {
          transform: translateY(-0.125rem);
          box-shadow: var(--bq-box-shadow--m);
        }
      }

      &:focus-visible {
        outline-offset: 2px;
        outline: 2px solid var(--bq-focus);
      }

      .card--mini {
        width: 100%;
        max-width: 24rem;

        &::part(wrapper) {
          display: flex;
          overflow: clip;
          transition: box-shadow 0.2s ease-in-out, transform 0.2s ease-in-out;
        }

        /** Same as the [Mini card example](#mini-card) */
      }
    }
    ```

    ```html HTML icon="html5" expandable theme={"theme":{"light":"one-light","dark":"night-owl"}}
    <a href="https://example.com/article" class="card-link">
      <bq-card type="minimal" class="card--mini">
        <div class="content--start">
          <bq-icon color="text--alt" name="graduation-cap-bold"></bq-icon>
        </div>
        <div class="content--end">
          <div class="body">
            <h6>Disciplines</h6>
            <p>Explore the extensive range of disciplines available at our university.</p>
          </div>
          <div class="decorator">
            <bq-icon color="text--brand" name="arrow-square-out"></bq-icon>
          </div>
        </div>
      </bq-card>
    </a>
    ```

    ```jsx React icon="react" expandable theme={"theme":{"light":"one-light","dark":"night-owl"}}
    import { BqCard, BqIcon } from "@beeq/react";
    import "./styles.css";

    <a href="https://example.com/article" className="card-link">
      <BqCard type="minimal" className="card--mini">
        <div className="content--start">
          <BqIcon color="text--alt" name="graduation-cap-bold" />
        </div>
        <div className="content--end">
          <div className="body">
            <h6>Disciplines</h6>
            <p>Explore the extensive range of disciplines available at our university.</p>
          </div>
          <div className="decorator">
            <BqIcon color="text--brand" name="arrow-square-out" />
          </div>
        </div>
      </BqCard>
    </a>
    ```

    ```ts Angular icon="angular" expandable theme={"theme":{"light":"one-light","dark":"night-owl"}}
    import { Component } from "@angular/core";
    import { BqCard, BqIcon } from "@beeq/angular/standalone";

    @Component({
      selector: "app-root",
      standalone: true,
      imports: [BqCard, BqIcon],
      template: `
        <a href="https://example.com/article" class="card-link">
          <bq-card type="minimal" class="card--mini">
            <div class="content--start">
              <bq-icon color="text--alt" name="graduation-cap-bold"></bq-icon>
            </div>
            <div class="content--end">
              <div class="body">
                <h6>Disciplines</h6>
                <p>Explore the extensive range of disciplines available at our university.</p>
              </div>
              <div class="decorator">
                <bq-icon color="text--brand" name="arrow-square-out"></bq-icon>
              </div>
            </div>
          </bq-card>
        </a>
      `,
      styles: [`
        .card-link {
          border-radius: var(--bq-radius--m);
          text-decoration: none;
          cursor: pointer;

          &:hover {
            & .card--mini::part(wrapper) {
              transform: translateY(-0.125rem);
              box-shadow: var(--bq-box-shadow--m);
            }
          }

          &:focus-visible {
            outline-offset: 2px;
            outline: 2px solid var(--bq-focus);
          }

          .card--mini {
            width: 100%;
            max-width: 24rem;

            &::part(wrapper) {
              display: flex;
              overflow: clip;
              transition: box-shadow 0.2s ease-in-out, transform 0.2s ease-in-out;
            }

            /** Same as the [Mini card example](#mini-card) */
          }
        }
      `],
    })
    export class AppComponent {}
    ```

    ```vue Vue icon="vuejs" expandable theme={"theme":{"light":"one-light","dark":"night-owl"}}
    <script setup lang="ts">
    import { BqCard, BqIcon } from "@beeq/vue";
    </script>

    <template>
      <a href="https://example.com/article" class="card-link">
        <BqCard type="minimal" class="card--mini">
          <div class="content--start">
            <BqIcon color="text--alt" name="graduation-cap-bold" />
          </div>
          <div class="content--end">
            <div class="body">
              <h6>Disciplines</h6>
              <p>Explore the extensive range of disciplines available at our university.</p>
            </div>
            <div class="decorator">
              <BqIcon color="text--brand" name="arrow-square-out" />
            </div>
          </div>
        </BqCard>
      </a>
    </template>


    <style>
      .card-link {
        border-radius: var(--bq-radius--m);
        text-decoration: none;
        cursor: pointer;

        &:hover {
          & .card--mini::part(wrapper) {
            transform: translateY(-0.125rem);
            box-shadow: var(--bq-box-shadow--m);
          }
        }

        &:focus-visible {
          outline-offset: 2px;
          outline: 2px solid var(--bq-focus);
        }

        .card--mini {
          width: 100%;
          max-width: 24rem;

          &::part(wrapper) {
            display: flex;
            overflow: clip;
            transition: box-shadow 0.2s ease-in-out, transform 0.2s ease-in-out;
          }

          /** Same as the [Mini card example](#mini-card) */
        }
      }
    </style>
    ```
  </CodeGroup>
</CodeLivePreview>

## API reference

### Properties

| Property | Attribute | Description                             | Type                                                                 | Default     |
| -------- | --------- | --------------------------------------- | -------------------------------------------------------------------- | ----------- |
| `border` | `border`  | The corner radius of the card component | `'none'` \| `'xs2'` \| `'xs'` \| `'s'` \| `'m'` \| `'l'` \| `'full'` | `'m'`       |
| `type`   | `type`    | Type of card component                  | `'default'` \| `'minimal'`                                           | `'default'` |

### Slots

| Slot        | Description                       |
| ----------- | --------------------------------- |
| *(default)* | The content of the card component |

### Shadow parts

| Part      | Description                                                        |
| --------- | ------------------------------------------------------------------ |
| `wrapper` | The wrapper container `<div>` of the element inside the shadow DOM |

### CSS custom properties

<Expandable title="CSS variables" defaultOpen={true}>
  | Variable                    | Description           | Default                           |
  | --------------------------- | --------------------- | --------------------------------- |
  | `--bq-card--borderColor`    | Card border color     | `transparent`                     |
  | `--bq-card--borderRadius`   | Card border radius    | `var(--bq-radius--m)`             |
  | `--bq-card--borderStyle`    | Card border style     | `solid`                           |
  | `--bq-card--borderWidth`    | Card border width     | `0`                               |
  | `--bq-card--padding`        | Card padding          | `var(--bq-spacing-l)`             |
  | `--bq-card--paddingMinimal` | Minimal card padding  | `var(--bq-spacing-xs)`            |
  | `--bq-card--background`     | Card background color | `var(--bq-background--secondary)` |
</Expandable>

<Tip>
  Learn more about [styling with shadow parts](/guides/styles#component-shadow-dom-parts) and [CSS custom properties](/guides/styles#global-css-custom-properties).
</Tip>

## Resources

<CardGroup cols={2}>
  <Card horizontal title="Interactive playground" icon="code" href="https://storybook.beeq.design/?path=/story/components-card--default">
    Explore card configurations in Storybook
  </Card>

  <Card horizontal title="Source code" icon="github" href="https://github.com/Endava/BEEQ/tree/main/packages/beeq/src/components/card">
    View the component source on GitHub
  </Card>
</CardGroup>
