Skip to content

Bio Reveal

A copy-paste profile headers component in pure HTML & CSS. Zero dependencies, framework-agnostic, MIT-licensed.

Profile HeadersHTMLCSSany framework

Independent product designer. I build calm, tactile interfaces for tools that feel like an extension of your hand. Currently exploring spatial UI and slow-software.

Show moreShow less

Copy into your project

HTML
<details class="nuda-bio-reveal">
  <summary>
    <p class="nuda-bio-reveal__text">
      Independent product designer. I build calm, tactile interfaces
      for tools that feel like an extension of your hand. Currently
      exploring spatial UI and slow-software.
    </p>
    <span class="nuda-bio-reveal__toggle">
      <span class="nuda-bio-reveal__more">Show more</span>
      <span class="nuda-bio-reveal__less">Show less</span>
      <svg class="nuda-bio-reveal__chev" viewBox="0 0 24 24"
        width="12" height="12" fill="none" stroke="currentColor"
        stroke-width="2" stroke-linecap="round" stroke-linejoin="round"
        aria-hidden="true"><path d="M6 9l6 6 6-6"/></svg>
    </span>
  </summary>
</details>
CSS
/* Bio Reveal
   Native <details> truncates the bio at 2 lines and toggles it.
   No JavaScript required. Customize: --reveal-accent, line clamp. */

.nuda-bio-reveal {
  --reveal-accent: #e4ff54;
  max-width: 320px;
  font-family: system-ui, sans-serif;
  color: #fafafa;
}

.nuda-bio-reveal > summary {
  list-style: none;
  cursor: pointer;
  display: flex;
  flex-direction: column;
  gap: 6px;
}

.nuda-bio-reveal > summary::-webkit-details-marker { display: none; }

.nuda-bio-reveal__text {
  margin: 0;
  font-size: 0.82rem;
  color: #a0a0a8;
  line-height: 1.5;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
  transition: all 0.3s ease;
}

.nuda-bio-reveal[open] .nuda-bio-reveal__text {
  -webkit-line-clamp: unset;
  line-clamp: unset;
  display: block;
}

.nuda-bio-reveal__toggle {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  font-size: 0.75rem;
  font-weight: 600;
  color: var(--reveal-accent);
  align-self: flex-start;
}

.nuda-bio-reveal__less { display: none; }
.nuda-bio-reveal[open] .nuda-bio-reveal__more { display: none; }
.nuda-bio-reveal[open] .nuda-bio-reveal__less { display: inline; }

.nuda-bio-reveal__chev {
  transition: transform 0.25s cubic-bezier(0.2, 0.7, 0.3, 1);
}

.nuda-bio-reveal[open] .nuda-bio-reveal__chev {
  transform: rotate(180deg);
}

.nuda-bio-reveal > summary:focus-visible {
  outline: 2px solid var(--reveal-accent);
  outline-offset: 3px;
  border-radius: 6px;
}

@media (prefers-reduced-motion: reduce) {
  .nuda-bio-reveal__text,
  .nuda-bio-reveal__chev { transition: none; }
}

How to use Bio Reveal

Paste the HTML where you need it and the CSS into a global stylesheet (or a <style> tag). Every class is prefixed nuda- so it never collides with Tailwind or your own styles. Tweak the CSS custom properties to match your design system.

Works in React, Vue, Svelte, Astro, Next.js, Nuxt, Laravel Blade, Django, Rails — or a single .html file. No npm install, no build step.

More profile headers components

← Browse all NudaUI components