05 / 32
All 32 in 32 Tailwind CSS Accordions — Vertical & Horizontal
- 01Tailwind CSS FAQ Accordion with Details and Summary
- 02Tailwind CSS Mobile Navigation Accordion Menu
- 03Tailwind CSS Product Filter Sidebar Accordion
- 04Tailwind CSS Nested Accordion Tree View
- 05Smooth Animated Tailwind Accordion with Height Transition
- 06Tailwind CSS Exclusive Accordion — Only One Open at a Time
- 07Minimal Tailwind Accordion with Animated Underline
- 08Tailwind CSS Numbered Steps Accordion for Onboarding
- 09Tailwind Accordion with Plus Minus Icon Animation
- 10Tailwind CSS Accordion Card with Rotating Chevron
- 11Brutalist Tailwind CSS Accordion
- 12Glassmorphism Tailwind CSS Accordion
- 13Tailwind CSS Timeline Accordion for Changelogs
- 14Tailwind CSS Card Accordion with Elevation on Open
- 15Skewed Tailwind CSS Accordion with Slanted Headers
- 16Tailwind CSS Stepped Cascade Accordion
- 17Tailwind Accordion with Circular Progress Ring
- 18Tailwind CSS Accordion with Marquee Scrolling Title
- 19Tailwind CSS Code Editor Accordion for Documentation
- 20Tailwind CSS 3D Paper Fold Accordion
- 21Tailwind CSS Playlist Accordion with Equalizer Animation
- 22Tailwind CSS Stacked Cards Accordion
- 23Tailwind Accordion with Animated Gradient Border
- 24Dark Tailwind CSS Accordion with Aurora Glow
- 25Tailwind CSS Horizontal Accordion Tabs
- 26Tailwind CSS Expanding Image Gallery Accordion
- 27Tailwind CSS Horizontal Accordion Feature Section
- 28Editorial Horizontal Accordion with Numbered Spines in Tailwind
- 29Tailwind CSS Horizontal Accordion with clip-path Reveal
- 30Tailwind CSS Album Shelf Horizontal Accordion
- 31Tailwind CSS Cinematic Horizontal Accordion Slider
- 32Tailwind CSS Aurora Gradient Horizontal Accordion
Smooth Animated Tailwind Accordion with Height Transition
The most-searched accordion problem, solved entirely in class lists: a native <details> changelog that slides open and closed with a real height: auto transition. Tailwind v4's details-content: variant styles the ::details-content box, [interpolate-size:allow-keywords] on the root makes auto animatable, and transition-discrete holds the content visible until the close finishes.
Untitled UI Pro: 5,000+ React + Tailwind CSS v4 components · from $349 one-time
Untitled UI React · Affiliate link
The code
<section class="tac-05 w-full min-h-svh grid place-items-center bg-tac05-bg bg-[radial-gradient(70%_55%_at_50%_0%,var(--color-tac05-glow),transparent_72%)] px-5 py-14 font-tac05-sans text-tac05-ink [interpolate-size:allow-keywords]" aria-label="Smooth animated accordion with height transition demo">
<div class="grid w-full justify-items-center gap-7">
<article class="w-full max-w-2xl rounded-[28px] bg-tac05-card p-[clamp(20px,4.5vw,36px)] shadow-tac05-card ring-1 ring-tac05-ink/6">
<header class="mb-7 flex flex-wrap items-end justify-between gap-x-6 gap-y-4">
<div class="min-w-0">
<p class="inline-flex items-center gap-2 rounded-full bg-tac05-tint px-3 py-1 text-xs font-bold tracking-[0.08em] uppercase text-tac05-acc-ink ring-1 ring-tac05-acc/20">
<span aria-hidden="true" class="relative flex size-2"><span class="absolute inset-0 animate-ping rounded-full bg-tac05-acc/60 motion-reduce:hidden"></span><span class="relative size-2 rounded-full bg-tac05-acc"></span></span>
Changelog · Q3 2026
</p>
<h2 class="mt-3.5 text-[clamp(24px,3.8vw,31px)] leading-tight font-extrabold tracking-[-0.03em] text-balance">What shipped this quarter</h2>
<p class="mt-1.5 text-[15px] text-tac05-mut">Three releases, forty-one fixes, zero breaking changes.</p>
</div>
<button type="button" class="inline-flex min-h-11 items-center gap-2 rounded-full bg-tac05-ink px-4.5 text-sm font-semibold text-white shadow-[0_1px_2px_oklch(0.2_0.02_170/0.3)] transition-[background-color,translate] duration-200 hover:-translate-y-px hover:bg-tac05-acc-ink focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-tac05-acc motion-reduce:transition-none">
<svg aria-hidden="true" viewBox="0 0 20 20" width="16" height="16"><path d="M4 10.5a5.5 5.5 0 0 1 5.5 5.5M4 5a11 11 0 0 1 11 11" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"/><circle cx="4.6" cy="15.4" r="1.4" fill="currentColor"/></svg>
Subscribe
</button>
</header>
<div class="grid gap-3">
<details class="group rounded-2xl bg-tac05-card ring-1 ring-tac05-line transition-[background-color,box-shadow] duration-300 hover:ring-tac05-acc/30 open:bg-tac05-tint/45 open:shadow-tac05-open open:ring-tac05-acc/35 details-content:h-0 details-content:overflow-clip details-content:opacity-0 details-content:transition-[height,opacity,content-visibility] details-content:transition-discrete details-content:duration-500 details-content:ease-[cubic-bezier(0.22,1,0.36,1)] open:details-content:h-auto open:details-content:opacity-100 motion-reduce:transition-none motion-reduce:details-content:transition-none" open>
<summary class="flex min-h-16 cursor-pointer list-none items-center gap-3.5 rounded-2xl px-4 py-3 outline-none focus-visible:ring-2 focus-visible:ring-tac05-acc focus-visible:ring-offset-2 focus-visible:ring-offset-tac05-card sm:px-5 [&::-webkit-details-marker]:hidden">
<span class="w-14 flex-none rounded-lg bg-tac05-acc/10 py-1 text-center font-tac05-mono text-xs font-semibold text-tac05-acc-ink ring-1 ring-tac05-acc/20 transition-colors duration-300 group-open:bg-tac05-acc-ink group-open:text-white group-open:ring-transparent">v3.4</span>
<span class="min-w-0 flex-1">
<span class="block text-base font-bold tracking-[-0.01em]">Realtime collaboration</span>
<span class="mt-0.5 flex flex-wrap items-center gap-x-2 text-[13px] text-tac05-mut"><span>Sep 24</span><span class="inline-flex items-center gap-2 before:size-1 before:rounded-full before:bg-tac05-mut/50 before:content-[''] font-semibold text-tac05-acc-ink">New</span></span>
</span>
<span aria-hidden="true" class="grid size-8 flex-none place-items-center rounded-full bg-tac05-ink/5 text-tac05-mut transition-[rotate,background-color,color] duration-300 group-open:rotate-180 group-open:bg-tac05-acc/15 group-open:text-tac05-acc-ink motion-reduce:transition-none"><svg viewBox="0 0 16 16" width="14" height="14"><path d="M4 6.2 8 10l4-3.8" fill="none" stroke="currentColor" stroke-width="1.9" stroke-linecap="round" stroke-linejoin="round"/></svg></span>
</summary>
<div class="translate-y-1.5 px-4 pb-5 transition-transform duration-500 ease-[cubic-bezier(0.22,1,0.36,1)] group-open:translate-y-0 motion-reduce:transition-none sm:ps-[5.75rem] sm:pe-6">
<p class="text-[15px] leading-relaxed text-tac05-body text-pretty">Multiplayer cursors, presence avatars and conflict-free co-editing landed across every document type. Sessions reconnect on their own, and offline edits merge cleanly when you're back.</p>
<ul class="mt-3.5 grid gap-2 text-sm text-tac05-body">
<li class="flex items-start gap-2.5"><svg aria-hidden="true" class="mt-0.5 flex-none text-tac05-acc" viewBox="0 0 16 16" width="16" height="16"><path d="m3.5 8.5 3 3 6-7" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg>Live cursors with names and selection colours</li>
<li class="flex items-start gap-2.5"><svg aria-hidden="true" class="mt-0.5 flex-none text-tac05-acc" viewBox="0 0 16 16" width="16" height="16"><path d="m3.5 8.5 3 3 6-7" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg>CRDT merge for documents, boards and tables</li>
<li class="flex items-start gap-2.5"><svg aria-hidden="true" class="mt-0.5 flex-none text-tac05-acc" viewBox="0 0 16 16" width="16" height="16"><path d="m3.5 8.5 3 3 6-7" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg>Offline queue keeps up to 2,000 pending edits</li>
</ul>
</div>
</details>
<details class="group rounded-2xl bg-tac05-card ring-1 ring-tac05-line transition-[background-color,box-shadow] duration-300 hover:ring-tac05-acc/30 open:bg-tac05-tint/45 open:shadow-tac05-open open:ring-tac05-acc/35 details-content:h-0 details-content:overflow-clip details-content:opacity-0 details-content:transition-[height,opacity,content-visibility] details-content:transition-discrete details-content:duration-500 details-content:ease-[cubic-bezier(0.22,1,0.36,1)] open:details-content:h-auto open:details-content:opacity-100 motion-reduce:transition-none motion-reduce:details-content:transition-none">
<summary class="flex min-h-16 cursor-pointer list-none items-center gap-3.5 rounded-2xl px-4 py-3 outline-none focus-visible:ring-2 focus-visible:ring-tac05-acc focus-visible:ring-offset-2 focus-visible:ring-offset-tac05-card sm:px-5 [&::-webkit-details-marker]:hidden">
<span class="w-14 flex-none rounded-lg bg-tac05-acc/10 py-1 text-center font-tac05-mono text-xs font-semibold text-tac05-acc-ink ring-1 ring-tac05-acc/20 transition-colors duration-300 group-open:bg-tac05-acc-ink group-open:text-white group-open:ring-transparent">v3.3</span>
<span class="min-w-0 flex-1">
<span class="block text-base font-bold tracking-[-0.01em]">Command palette</span>
<span class="mt-0.5 flex flex-wrap items-center gap-x-2 text-[13px] text-tac05-mut"><span>Aug 13</span><span class="inline-flex items-center gap-2 before:size-1 before:rounded-full before:bg-tac05-mut/50 before:content-[''] font-semibold text-tac05-acc-ink">New</span></span>
</span>
<span aria-hidden="true" class="grid size-8 flex-none place-items-center rounded-full bg-tac05-ink/5 text-tac05-mut transition-[rotate,background-color,color] duration-300 group-open:rotate-180 group-open:bg-tac05-acc/15 group-open:text-tac05-acc-ink motion-reduce:transition-none"><svg viewBox="0 0 16 16" width="14" height="14"><path d="M4 6.2 8 10l4-3.8" fill="none" stroke="currentColor" stroke-width="1.9" stroke-linecap="round" stroke-linejoin="round"/></svg></span>
</summary>
<div class="translate-y-1.5 px-4 pb-5 transition-transform duration-500 ease-[cubic-bezier(0.22,1,0.36,1)] group-open:translate-y-0 motion-reduce:transition-none sm:ps-[5.75rem] sm:pe-6">
<p class="text-[15px] leading-relaxed text-tac05-body text-pretty">Press <kbd class="rounded-md bg-tac05-card px-1.5 py-0.5 font-tac05-mono text-xs font-semibold text-tac05-ink shadow-[0_1px_0_oklch(0.2_0.02_170/0.18)] ring-1 ring-tac05-line">⌘K</kbd> anywhere to search actions, files and people. Fuzzy matching, recent-first ranking and full keyboard operation come out of the box.</p>
<ul class="mt-3.5 grid gap-2 text-sm text-tac05-body">
<li class="flex items-start gap-2.5"><svg aria-hidden="true" class="mt-0.5 flex-none text-tac05-acc" viewBox="0 0 16 16" width="16" height="16"><path d="m3.5 8.5 3 3 6-7" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg>Scoped search with <span class="font-tac05-mono text-[13px]">></span> for actions and <span class="font-tac05-mono text-[13px]">@</span> for people</li>
<li class="flex items-start gap-2.5"><svg aria-hidden="true" class="mt-0.5 flex-none text-tac05-acc" viewBox="0 0 16 16" width="16" height="16"><path d="m3.5 8.5 3 3 6-7" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg>Results in under 40 ms on workspaces with 100k files</li>
</ul>
</div>
</details>
<details class="group rounded-2xl bg-tac05-card ring-1 ring-tac05-line transition-[background-color,box-shadow] duration-300 hover:ring-tac05-acc/30 open:bg-tac05-tint/45 open:shadow-tac05-open open:ring-tac05-acc/35 details-content:h-0 details-content:overflow-clip details-content:opacity-0 details-content:transition-[height,opacity,content-visibility] details-content:transition-discrete details-content:duration-500 details-content:ease-[cubic-bezier(0.22,1,0.36,1)] open:details-content:h-auto open:details-content:opacity-100 motion-reduce:transition-none motion-reduce:details-content:transition-none">
<summary class="flex min-h-16 cursor-pointer list-none items-center gap-3.5 rounded-2xl px-4 py-3 outline-none focus-visible:ring-2 focus-visible:ring-tac05-acc focus-visible:ring-offset-2 focus-visible:ring-offset-tac05-card sm:px-5 [&::-webkit-details-marker]:hidden">
<span class="w-14 flex-none rounded-lg bg-tac05-acc/10 py-1 text-center font-tac05-mono text-xs font-semibold text-tac05-acc-ink ring-1 ring-tac05-acc/20 transition-colors duration-300 group-open:bg-tac05-acc-ink group-open:text-white group-open:ring-transparent">v3.2</span>
<span class="min-w-0 flex-1">
<span class="block text-base font-bold tracking-[-0.01em]">Audit log export</span>
<span class="mt-0.5 flex flex-wrap items-center gap-x-2 text-[13px] text-tac05-mut"><span>Jul 2</span><span class="inline-flex items-center gap-2 before:size-1 before:rounded-full before:bg-tac05-mut/50 before:content-[''] font-semibold text-tac05-ink">Enterprise</span></span>
</span>
<span aria-hidden="true" class="grid size-8 flex-none place-items-center rounded-full bg-tac05-ink/5 text-tac05-mut transition-[rotate,background-color,color] duration-300 group-open:rotate-180 group-open:bg-tac05-acc/15 group-open:text-tac05-acc-ink motion-reduce:transition-none"><svg viewBox="0 0 16 16" width="14" height="14"><path d="M4 6.2 8 10l4-3.8" fill="none" stroke="currentColor" stroke-width="1.9" stroke-linecap="round" stroke-linejoin="round"/></svg></span>
</summary>
<div class="translate-y-1.5 px-4 pb-5 transition-transform duration-500 ease-[cubic-bezier(0.22,1,0.36,1)] group-open:translate-y-0 motion-reduce:transition-none sm:ps-[5.75rem] sm:pe-6">
<p class="text-[15px] leading-relaxed text-tac05-body text-pretty">Admins can stream audit events to S3 or download signed CSV exports. Retention is configurable per workspace, and SOC 2 evidence bundles are one click away.</p>
<ul class="mt-3.5 grid gap-2 text-sm text-tac05-body">
<li class="flex items-start gap-2.5"><svg aria-hidden="true" class="mt-0.5 flex-none text-tac05-acc" viewBox="0 0 16 16" width="16" height="16"><path d="m3.5 8.5 3 3 6-7" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg>Hourly S3 delivery with SHA-256 manifests</li>
<li class="flex items-start gap-2.5"><svg aria-hidden="true" class="mt-0.5 flex-none text-tac05-acc" viewBox="0 0 16 16" width="16" height="16"><path d="m3.5 8.5 3 3 6-7" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg>Retention from 90 days to 7 years</li>
</ul>
</div>
</details>
</div>
<footer class="mt-6 flex flex-wrap items-center justify-between gap-3 border-t border-tac05-line pt-5 text-sm text-tac05-mut">
<span>Showing 3 of 28 releases</span>
<button type="button" class="-mx-2 inline-flex min-h-11 items-center gap-1.5 rounded-lg px-2 font-semibold text-tac05-acc-ink transition-colors hover:text-tac05-ink focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-tac05-acc">View full archive <span aria-hidden="true">→</span></button>
</footer>
</article>
<p aria-hidden="true" class="rounded-full bg-tac05-card/70 px-3.5 py-2 text-center font-tac05-mono text-[11.5px] text-tac05-mut ring-1 ring-tac05-ink/8">details-content:h-0 · open:details-content:h-auto · [interpolate-size:allow-keywords]</p>
</div>
</section><section class="tac-05 w-full min-h-svh grid place-items-center bg-tac05-bg bg-[radial-gradient(70%_55%_at_50%_0%,var(--color-tac05-glow),transparent_72%)] px-5 py-14 font-tac05-sans text-tac05-ink [interpolate-size:allow-keywords]" aria-label="Smooth animated accordion with height transition demo">
<div class="grid w-full justify-items-center gap-7">
<article class="w-full max-w-2xl rounded-[28px] bg-tac05-card p-[clamp(20px,4.5vw,36px)] shadow-tac05-card ring-1 ring-tac05-ink/6">
<header class="mb-7 flex flex-wrap items-end justify-between gap-x-6 gap-y-4">
<div class="min-w-0">
<p class="inline-flex items-center gap-2 rounded-full bg-tac05-tint px-3 py-1 text-xs font-bold tracking-[0.08em] uppercase text-tac05-acc-ink ring-1 ring-tac05-acc/20">
<span aria-hidden="true" class="relative flex size-2"><span class="absolute inset-0 animate-ping rounded-full bg-tac05-acc/60 motion-reduce:hidden"></span><span class="relative size-2 rounded-full bg-tac05-acc"></span></span>
Changelog · Q3 2026
</p>
<h2 class="mt-3.5 text-[clamp(24px,3.8vw,31px)] leading-tight font-extrabold tracking-[-0.03em] text-balance">What shipped this quarter</h2>
<p class="mt-1.5 text-[15px] text-tac05-mut">Three releases, forty-one fixes, zero breaking changes.</p>
</div>
<button type="button" class="inline-flex min-h-11 items-center gap-2 rounded-full bg-tac05-ink px-4.5 text-sm font-semibold text-white shadow-[0_1px_2px_oklch(0.2_0.02_170/0.3)] transition-[background-color,translate] duration-200 hover:-translate-y-px hover:bg-tac05-acc-ink focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-tac05-acc motion-reduce:transition-none">
<svg aria-hidden="true" viewBox="0 0 20 20" width="16" height="16"><path d="M4 10.5a5.5 5.5 0 0 1 5.5 5.5M4 5a11 11 0 0 1 11 11" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"/><circle cx="4.6" cy="15.4" r="1.4" fill="currentColor"/></svg>
Subscribe
</button>
</header>
<div class="grid gap-3">
<details class="group rounded-2xl bg-tac05-card ring-1 ring-tac05-line transition-[background-color,box-shadow] duration-300 hover:ring-tac05-acc/30 open:bg-tac05-tint/45 open:shadow-tac05-open open:ring-tac05-acc/35 details-content:h-0 details-content:overflow-clip details-content:opacity-0 details-content:transition-[height,opacity,content-visibility] details-content:transition-discrete details-content:duration-500 details-content:ease-[cubic-bezier(0.22,1,0.36,1)] open:details-content:h-auto open:details-content:opacity-100 motion-reduce:transition-none motion-reduce:details-content:transition-none" open>
<summary class="flex min-h-16 cursor-pointer list-none items-center gap-3.5 rounded-2xl px-4 py-3 outline-none focus-visible:ring-2 focus-visible:ring-tac05-acc focus-visible:ring-offset-2 focus-visible:ring-offset-tac05-card sm:px-5 [&::-webkit-details-marker]:hidden">
<span class="w-14 flex-none rounded-lg bg-tac05-acc/10 py-1 text-center font-tac05-mono text-xs font-semibold text-tac05-acc-ink ring-1 ring-tac05-acc/20 transition-colors duration-300 group-open:bg-tac05-acc-ink group-open:text-white group-open:ring-transparent">v3.4</span>
<span class="min-w-0 flex-1">
<span class="block text-base font-bold tracking-[-0.01em]">Realtime collaboration</span>
<span class="mt-0.5 flex flex-wrap items-center gap-x-2 text-[13px] text-tac05-mut"><span>Sep 24</span><span class="inline-flex items-center gap-2 before:size-1 before:rounded-full before:bg-tac05-mut/50 before:content-[''] font-semibold text-tac05-acc-ink">New</span></span>
</span>
<span aria-hidden="true" class="grid size-8 flex-none place-items-center rounded-full bg-tac05-ink/5 text-tac05-mut transition-[rotate,background-color,color] duration-300 group-open:rotate-180 group-open:bg-tac05-acc/15 group-open:text-tac05-acc-ink motion-reduce:transition-none"><svg viewBox="0 0 16 16" width="14" height="14"><path d="M4 6.2 8 10l4-3.8" fill="none" stroke="currentColor" stroke-width="1.9" stroke-linecap="round" stroke-linejoin="round"/></svg></span>
</summary>
<div class="translate-y-1.5 px-4 pb-5 transition-transform duration-500 ease-[cubic-bezier(0.22,1,0.36,1)] group-open:translate-y-0 motion-reduce:transition-none sm:ps-[5.75rem] sm:pe-6">
<p class="text-[15px] leading-relaxed text-tac05-body text-pretty">Multiplayer cursors, presence avatars and conflict-free co-editing landed across every document type. Sessions reconnect on their own, and offline edits merge cleanly when you're back.</p>
<ul class="mt-3.5 grid gap-2 text-sm text-tac05-body">
<li class="flex items-start gap-2.5"><svg aria-hidden="true" class="mt-0.5 flex-none text-tac05-acc" viewBox="0 0 16 16" width="16" height="16"><path d="m3.5 8.5 3 3 6-7" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg>Live cursors with names and selection colours</li>
<li class="flex items-start gap-2.5"><svg aria-hidden="true" class="mt-0.5 flex-none text-tac05-acc" viewBox="0 0 16 16" width="16" height="16"><path d="m3.5 8.5 3 3 6-7" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg>CRDT merge for documents, boards and tables</li>
<li class="flex items-start gap-2.5"><svg aria-hidden="true" class="mt-0.5 flex-none text-tac05-acc" viewBox="0 0 16 16" width="16" height="16"><path d="m3.5 8.5 3 3 6-7" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg>Offline queue keeps up to 2,000 pending edits</li>
</ul>
</div>
</details>
<details class="group rounded-2xl bg-tac05-card ring-1 ring-tac05-line transition-[background-color,box-shadow] duration-300 hover:ring-tac05-acc/30 open:bg-tac05-tint/45 open:shadow-tac05-open open:ring-tac05-acc/35 details-content:h-0 details-content:overflow-clip details-content:opacity-0 details-content:transition-[height,opacity,content-visibility] details-content:transition-discrete details-content:duration-500 details-content:ease-[cubic-bezier(0.22,1,0.36,1)] open:details-content:h-auto open:details-content:opacity-100 motion-reduce:transition-none motion-reduce:details-content:transition-none">
<summary class="flex min-h-16 cursor-pointer list-none items-center gap-3.5 rounded-2xl px-4 py-3 outline-none focus-visible:ring-2 focus-visible:ring-tac05-acc focus-visible:ring-offset-2 focus-visible:ring-offset-tac05-card sm:px-5 [&::-webkit-details-marker]:hidden">
<span class="w-14 flex-none rounded-lg bg-tac05-acc/10 py-1 text-center font-tac05-mono text-xs font-semibold text-tac05-acc-ink ring-1 ring-tac05-acc/20 transition-colors duration-300 group-open:bg-tac05-acc-ink group-open:text-white group-open:ring-transparent">v3.3</span>
<span class="min-w-0 flex-1">
<span class="block text-base font-bold tracking-[-0.01em]">Command palette</span>
<span class="mt-0.5 flex flex-wrap items-center gap-x-2 text-[13px] text-tac05-mut"><span>Aug 13</span><span class="inline-flex items-center gap-2 before:size-1 before:rounded-full before:bg-tac05-mut/50 before:content-[''] font-semibold text-tac05-acc-ink">New</span></span>
</span>
<span aria-hidden="true" class="grid size-8 flex-none place-items-center rounded-full bg-tac05-ink/5 text-tac05-mut transition-[rotate,background-color,color] duration-300 group-open:rotate-180 group-open:bg-tac05-acc/15 group-open:text-tac05-acc-ink motion-reduce:transition-none"><svg viewBox="0 0 16 16" width="14" height="14"><path d="M4 6.2 8 10l4-3.8" fill="none" stroke="currentColor" stroke-width="1.9" stroke-linecap="round" stroke-linejoin="round"/></svg></span>
</summary>
<div class="translate-y-1.5 px-4 pb-5 transition-transform duration-500 ease-[cubic-bezier(0.22,1,0.36,1)] group-open:translate-y-0 motion-reduce:transition-none sm:ps-[5.75rem] sm:pe-6">
<p class="text-[15px] leading-relaxed text-tac05-body text-pretty">Press <kbd class="rounded-md bg-tac05-card px-1.5 py-0.5 font-tac05-mono text-xs font-semibold text-tac05-ink shadow-[0_1px_0_oklch(0.2_0.02_170/0.18)] ring-1 ring-tac05-line">⌘K</kbd> anywhere to search actions, files and people. Fuzzy matching, recent-first ranking and full keyboard operation come out of the box.</p>
<ul class="mt-3.5 grid gap-2 text-sm text-tac05-body">
<li class="flex items-start gap-2.5"><svg aria-hidden="true" class="mt-0.5 flex-none text-tac05-acc" viewBox="0 0 16 16" width="16" height="16"><path d="m3.5 8.5 3 3 6-7" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg>Scoped search with <span class="font-tac05-mono text-[13px]">></span> for actions and <span class="font-tac05-mono text-[13px]">@</span> for people</li>
<li class="flex items-start gap-2.5"><svg aria-hidden="true" class="mt-0.5 flex-none text-tac05-acc" viewBox="0 0 16 16" width="16" height="16"><path d="m3.5 8.5 3 3 6-7" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg>Results in under 40 ms on workspaces with 100k files</li>
</ul>
</div>
</details>
<details class="group rounded-2xl bg-tac05-card ring-1 ring-tac05-line transition-[background-color,box-shadow] duration-300 hover:ring-tac05-acc/30 open:bg-tac05-tint/45 open:shadow-tac05-open open:ring-tac05-acc/35 details-content:h-0 details-content:overflow-clip details-content:opacity-0 details-content:transition-[height,opacity,content-visibility] details-content:transition-discrete details-content:duration-500 details-content:ease-[cubic-bezier(0.22,1,0.36,1)] open:details-content:h-auto open:details-content:opacity-100 motion-reduce:transition-none motion-reduce:details-content:transition-none">
<summary class="flex min-h-16 cursor-pointer list-none items-center gap-3.5 rounded-2xl px-4 py-3 outline-none focus-visible:ring-2 focus-visible:ring-tac05-acc focus-visible:ring-offset-2 focus-visible:ring-offset-tac05-card sm:px-5 [&::-webkit-details-marker]:hidden">
<span class="w-14 flex-none rounded-lg bg-tac05-acc/10 py-1 text-center font-tac05-mono text-xs font-semibold text-tac05-acc-ink ring-1 ring-tac05-acc/20 transition-colors duration-300 group-open:bg-tac05-acc-ink group-open:text-white group-open:ring-transparent">v3.2</span>
<span class="min-w-0 flex-1">
<span class="block text-base font-bold tracking-[-0.01em]">Audit log export</span>
<span class="mt-0.5 flex flex-wrap items-center gap-x-2 text-[13px] text-tac05-mut"><span>Jul 2</span><span class="inline-flex items-center gap-2 before:size-1 before:rounded-full before:bg-tac05-mut/50 before:content-[''] font-semibold text-tac05-ink">Enterprise</span></span>
</span>
<span aria-hidden="true" class="grid size-8 flex-none place-items-center rounded-full bg-tac05-ink/5 text-tac05-mut transition-[rotate,background-color,color] duration-300 group-open:rotate-180 group-open:bg-tac05-acc/15 group-open:text-tac05-acc-ink motion-reduce:transition-none"><svg viewBox="0 0 16 16" width="14" height="14"><path d="M4 6.2 8 10l4-3.8" fill="none" stroke="currentColor" stroke-width="1.9" stroke-linecap="round" stroke-linejoin="round"/></svg></span>
</summary>
<div class="translate-y-1.5 px-4 pb-5 transition-transform duration-500 ease-[cubic-bezier(0.22,1,0.36,1)] group-open:translate-y-0 motion-reduce:transition-none sm:ps-[5.75rem] sm:pe-6">
<p class="text-[15px] leading-relaxed text-tac05-body text-pretty">Admins can stream audit events to S3 or download signed CSV exports. Retention is configurable per workspace, and SOC 2 evidence bundles are one click away.</p>
<ul class="mt-3.5 grid gap-2 text-sm text-tac05-body">
<li class="flex items-start gap-2.5"><svg aria-hidden="true" class="mt-0.5 flex-none text-tac05-acc" viewBox="0 0 16 16" width="16" height="16"><path d="m3.5 8.5 3 3 6-7" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg>Hourly S3 delivery with SHA-256 manifests</li>
<li class="flex items-start gap-2.5"><svg aria-hidden="true" class="mt-0.5 flex-none text-tac05-acc" viewBox="0 0 16 16" width="16" height="16"><path d="m3.5 8.5 3 3 6-7" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg>Retention from 90 days to 7 years</li>
</ul>
</div>
</details>
</div>
<footer class="mt-6 flex flex-wrap items-center justify-between gap-3 border-t border-tac05-line pt-5 text-sm text-tac05-mut">
<span>Showing 3 of 28 releases</span>
<button type="button" class="-mx-2 inline-flex min-h-11 items-center gap-1.5 rounded-lg px-2 font-semibold text-tac05-acc-ink transition-colors hover:text-tac05-ink focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-tac05-acc">View full archive <span aria-hidden="true">→</span></button>
</footer>
</article>
<p aria-hidden="true" class="rounded-full bg-tac05-card/70 px-3.5 py-2 text-center font-tac05-mono text-[11.5px] text-tac05-mut ring-1 ring-tac05-ink/8">details-content:h-0 · open:details-content:h-auto · [interpolate-size:allow-keywords]</p>
</div>
</section>@import "tailwindcss";
@theme {
--color-tac05-bg: #f3f8f6;
--color-tac05-bg: oklch(0.975 0.006 165);
--color-tac05-glow: #d8f7e6;
--color-tac05-glow: oklch(0.95 0.04 162);
--color-tac05-card: #ffffff;
--color-tac05-card: oklch(1 0 0);
--color-tac05-tint: #ebfaf2;
--color-tac05-tint: oklch(0.975 0.022 162);
--color-tac05-line: #e2e9e6;
--color-tac05-line: oklch(0.93 0.008 170);
--color-tac05-ink: #111e19;
--color-tac05-ink: oklch(0.22 0.02 170);
--color-tac05-body: #3a4843;
--color-tac05-body: oklch(0.39 0.018 170);
--color-tac05-mut: #505f59;
--color-tac05-mut: oklch(0.47 0.02 170);
--color-tac05-acc: #00a76f;
--color-tac05-acc: oklch(0.64 0.15 162);
--color-tac05-acc-ink: #00774d;
--color-tac05-acc-ink: oklch(0.5 0.12 162);
--font-tac05-sans: 'Manrope', system-ui, sans-serif;
--font-tac05-mono: 'Geist Mono', ui-monospace, monospace;
--shadow-tac05-card: 0 1px 2px oklch(0.3 0.03 170 / 0.06), 0 24px 60px -28px oklch(0.35 0.06 165 / 0.3);
--shadow-tac05-open: 0 1px 2px oklch(0.4 0.08 162 / 0.08), 0 14px 32px -16px oklch(0.5 0.12 162 / 0.35);
}
/* Root rule: the full-bleed contract, stated in CSS as well as in the markup's utilities, so the
stage is sized before the browser build compiles. */
.tac-05 {
width: 100%;
min-height: 100svh;
}@import "tailwindcss";
@theme {
--color-tac05-bg: #f3f8f6;
--color-tac05-bg: oklch(0.975 0.006 165);
--color-tac05-glow: #d8f7e6;
--color-tac05-glow: oklch(0.95 0.04 162);
--color-tac05-card: #ffffff;
--color-tac05-card: oklch(1 0 0);
--color-tac05-tint: #ebfaf2;
--color-tac05-tint: oklch(0.975 0.022 162);
--color-tac05-line: #e2e9e6;
--color-tac05-line: oklch(0.93 0.008 170);
--color-tac05-ink: #111e19;
--color-tac05-ink: oklch(0.22 0.02 170);
--color-tac05-body: #3a4843;
--color-tac05-body: oklch(0.39 0.018 170);
--color-tac05-mut: #505f59;
--color-tac05-mut: oklch(0.47 0.02 170);
--color-tac05-acc: #00a76f;
--color-tac05-acc: oklch(0.64 0.15 162);
--color-tac05-acc-ink: #00774d;
--color-tac05-acc-ink: oklch(0.5 0.12 162);
--font-tac05-sans: 'Manrope', system-ui, sans-serif;
--font-tac05-mono: 'Geist Mono', ui-monospace, monospace;
--shadow-tac05-card: 0 1px 2px oklch(0.3 0.03 170 / 0.06), 0 24px 60px -28px oklch(0.35 0.06 165 / 0.3);
--shadow-tac05-open: 0 1px 2px oklch(0.4 0.08 162 / 0.08), 0 14px 32px -16px oklch(0.5 0.12 162 / 0.35);
}
/* Root rule: the full-bleed contract, stated in CSS as well as in the markup's utilities, so the
stage is sized before the browser build compiles. */
.tac-05 {
width: 100%;
min-height: 100svh;
}Setup — do this once per project
Skip this if your project already runs Tailwind v4.
<script src="https://cdn.jsdelivr.net/npm/@tailwindcss/browser@4"></script>
<script src="https://cdn.jsdelivr.net/npm/@tailwindcss/browser@4"></script>Compiles in the browser — perfect for a CodePen or a quick test, not for production.
npm install tailwindcss @tailwindcss/vite
npm install tailwindcss @tailwindcss/vite// vite.config.js ("type": "module" in package.json)
import { defineConfig } from 'vite'
import tailwindcss from '@tailwindcss/vite'
export default defineConfig({
plugins: [tailwindcss()],
})// vite.config.js ("type": "module" in package.json)
import { defineConfig } from 'vite'
import tailwindcss from '@tailwindcss/vite'
export default defineConfig({
plugins: [tailwindcss()],
})Any v4 setup works — Vite, PostCSS or the CLI. Nothing in this demo is bundler-specific.
@import "tailwindcss";
@theme {
--color-tac05-bg: #f3f8f6;
--color-tac05-bg: oklch(0.975 0.006 165);
--color-tac05-glow: #d8f7e6;
--color-tac05-glow: oklch(0.95 0.04 162);
--color-tac05-card: #ffffff;
--color-tac05-card: oklch(1 0 0);
--color-tac05-tint: #ebfaf2;
--color-tac05-tint: oklch(0.975 0.022 162);
--color-tac05-line: #e2e9e6;
--color-tac05-line: oklch(0.93 0.008 170);
--color-tac05-ink: #111e19;
--color-tac05-ink: oklch(0.22 0.02 170);
--color-tac05-body: #3a4843;
--color-tac05-body: oklch(0.39 0.018 170);
--color-tac05-mut: #505f59;
--color-tac05-mut: oklch(0.47 0.02 170);
--color-tac05-acc: #00a76f;
--color-tac05-acc: oklch(0.64 0.15 162);
--color-tac05-acc-ink: #00774d;
--color-tac05-acc-ink: oklch(0.5 0.12 162);
--font-tac05-sans: 'Manrope', system-ui, sans-serif;
--font-tac05-mono: 'Geist Mono', ui-monospace, monospace;
--shadow-tac05-card: 0 1px 2px oklch(0.3 0.03 170 / 0.06), 0 24px 60px -28px oklch(0.35 0.06 165 / 0.3);
--shadow-tac05-open: 0 1px 2px oklch(0.4 0.08 162 / 0.08), 0 14px 32px -16px oklch(0.5 0.12 162 / 0.35);
}
/* Root rule: the full-bleed contract, stated in CSS as well as in the markup's utilities, so the
stage is sized before the browser build compiles. */
.tac-05 {
width: 100%;
min-height: 100svh;
}@import "tailwindcss";
@theme {
--color-tac05-bg: #f3f8f6;
--color-tac05-bg: oklch(0.975 0.006 165);
--color-tac05-glow: #d8f7e6;
--color-tac05-glow: oklch(0.95 0.04 162);
--color-tac05-card: #ffffff;
--color-tac05-card: oklch(1 0 0);
--color-tac05-tint: #ebfaf2;
--color-tac05-tint: oklch(0.975 0.022 162);
--color-tac05-line: #e2e9e6;
--color-tac05-line: oklch(0.93 0.008 170);
--color-tac05-ink: #111e19;
--color-tac05-ink: oklch(0.22 0.02 170);
--color-tac05-body: #3a4843;
--color-tac05-body: oklch(0.39 0.018 170);
--color-tac05-mut: #505f59;
--color-tac05-mut: oklch(0.47 0.02 170);
--color-tac05-acc: #00a76f;
--color-tac05-acc: oklch(0.64 0.15 162);
--color-tac05-acc-ink: #00774d;
--color-tac05-acc-ink: oklch(0.5 0.12 162);
--font-tac05-sans: 'Manrope', system-ui, sans-serif;
--font-tac05-mono: 'Geist Mono', ui-monospace, monospace;
--shadow-tac05-card: 0 1px 2px oklch(0.3 0.03 170 / 0.06), 0 24px 60px -28px oklch(0.35 0.06 165 / 0.3);
--shadow-tac05-open: 0 1px 2px oklch(0.4 0.08 162 / 0.08), 0 14px 32px -16px oklch(0.5 0.12 162 / 0.35);
}
/* Root rule: the full-bleed contract, stated in CSS as well as in the markup's utilities, so the
stage is sized before the browser build compiles. */
.tac-05 {
width: 100%;
min-height: 100svh;
}<link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Manrope:wght@400..800&family=Geist+Mono:wght@400..600&display=swap">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Manrope:wght@400..800&family=Geist+Mono:wght@400..600&display=swap">What changed in the port
Which parts became utilities, which stayed CSS, and why.
- The original's two
::details-contentrules became sixdetails-content:/open:details-content:utilities on each<details>;transition-behavior: allow-discreteis the stocktransition-discreteutility. interpolate-size: allow-keywordsmoved from the CSS root rule to the arbitrary property[interpolate-size:allow-keywords]on the section — nothing stayed CSS but tokens and the root rule.- UI upgrade from the CSS original: a full changelog card instead of three bare rows — live-pulse kicker, subscribe action, release dates and type labels, check-listed highlights and an archive footer; the version badge fills solid on open as a second, non-colour-only state cue.
- UI upgrade: the chevron now rotates inside a tinted 32px disc, the body rises 6px as it unfolds, the open card gains an emerald-tinted lift, muted copy sits at 6.7:1, and every summary is 64px tall with an offset focus ring.
Here's a working CSS demo from CodeFronts. Use it as-is or adapt to your framework. All classes are scoped under a unique prefix so the code won't collide with your existing styles. MIT licensed.
Demo: Smooth Animated Tailwind Accordion with Height Transition
Source: https://codefronts.com/navigation/tailwind-css-accordions/smooth-animated-tailwind-accordion-height-transition/
The most-searched accordion problem, solved entirely in class lists: a native <details> changelog that slides open and closed with a real height: auto transition. Tailwind v4's details-content: variant styles the ::details-content box, [interpolate-size:allow-keywords] on the root makes auto animatable, and transition-discrete holds the content visible until the close finishes.
## HTML
```html
<section class="tac-05 w-full min-h-svh grid place-items-center bg-tac05-bg bg-[radial-gradient(70%_55%_at_50%_0%,var(--color-tac05-glow),transparent_72%)] px-5 py-14 font-tac05-sans text-tac05-ink [interpolate-size:allow-keywords]" aria-label="Smooth animated accordion with height transition demo">
<div class="grid w-full justify-items-center gap-7">
<article class="w-full max-w-2xl rounded-[28px] bg-tac05-card p-[clamp(20px,4.5vw,36px)] shadow-tac05-card ring-1 ring-tac05-ink/6">
<header class="mb-7 flex flex-wrap items-end justify-between gap-x-6 gap-y-4">
<div class="min-w-0">
<p class="inline-flex items-center gap-2 rounded-full bg-tac05-tint px-3 py-1 text-xs font-bold tracking-[0.08em] uppercase text-tac05-acc-ink ring-1 ring-tac05-acc/20">
<span aria-hidden="true" class="relative flex size-2"><span class="absolute inset-0 animate-ping rounded-full bg-tac05-acc/60 motion-reduce:hidden"></span><span class="relative size-2 rounded-full bg-tac05-acc"></span></span>
Changelog · Q3 2026
</p>
<h2 class="mt-3.5 text-[clamp(24px,3.8vw,31px)] leading-tight font-extrabold tracking-[-0.03em] text-balance">What shipped this quarter</h2>
<p class="mt-1.5 text-[15px] text-tac05-mut">Three releases, forty-one fixes, zero breaking changes.</p>
</div>
<button type="button" class="inline-flex min-h-11 items-center gap-2 rounded-full bg-tac05-ink px-4.5 text-sm font-semibold text-white shadow-[0_1px_2px_oklch(0.2_0.02_170/0.3)] transition-[background-color,translate] duration-200 hover:-translate-y-px hover:bg-tac05-acc-ink focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-tac05-acc motion-reduce:transition-none">
<svg aria-hidden="true" viewBox="0 0 20 20" width="16" height="16"><path d="M4 10.5a5.5 5.5 0 0 1 5.5 5.5M4 5a11 11 0 0 1 11 11" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"/><circle cx="4.6" cy="15.4" r="1.4" fill="currentColor"/></svg>
Subscribe
</button>
</header>
<div class="grid gap-3">
<details class="group rounded-2xl bg-tac05-card ring-1 ring-tac05-line transition-[background-color,box-shadow] duration-300 hover:ring-tac05-acc/30 open:bg-tac05-tint/45 open:shadow-tac05-open open:ring-tac05-acc/35 details-content:h-0 details-content:overflow-clip details-content:opacity-0 details-content:transition-[height,opacity,content-visibility] details-content:transition-discrete details-content:duration-500 details-content:ease-[cubic-bezier(0.22,1,0.36,1)] open:details-content:h-auto open:details-content:opacity-100 motion-reduce:transition-none motion-reduce:details-content:transition-none" open>
<summary class="flex min-h-16 cursor-pointer list-none items-center gap-3.5 rounded-2xl px-4 py-3 outline-none focus-visible:ring-2 focus-visible:ring-tac05-acc focus-visible:ring-offset-2 focus-visible:ring-offset-tac05-card sm:px-5 [&::-webkit-details-marker]:hidden">
<span class="w-14 flex-none rounded-lg bg-tac05-acc/10 py-1 text-center font-tac05-mono text-xs font-semibold text-tac05-acc-ink ring-1 ring-tac05-acc/20 transition-colors duration-300 group-open:bg-tac05-acc-ink group-open:text-white group-open:ring-transparent">v3.4</span>
<span class="min-w-0 flex-1">
<span class="block text-base font-bold tracking-[-0.01em]">Realtime collaboration</span>
<span class="mt-0.5 flex flex-wrap items-center gap-x-2 text-[13px] text-tac05-mut"><span>Sep 24</span><span class="inline-flex items-center gap-2 before:size-1 before:rounded-full before:bg-tac05-mut/50 before:content-[''] font-semibold text-tac05-acc-ink">New</span></span>
</span>
<span aria-hidden="true" class="grid size-8 flex-none place-items-center rounded-full bg-tac05-ink/5 text-tac05-mut transition-[rotate,background-color,color] duration-300 group-open:rotate-180 group-open:bg-tac05-acc/15 group-open:text-tac05-acc-ink motion-reduce:transition-none"><svg viewBox="0 0 16 16" width="14" height="14"><path d="M4 6.2 8 10l4-3.8" fill="none" stroke="currentColor" stroke-width="1.9" stroke-linecap="round" stroke-linejoin="round"/></svg></span>
</summary>
<div class="translate-y-1.5 px-4 pb-5 transition-transform duration-500 ease-[cubic-bezier(0.22,1,0.36,1)] group-open:translate-y-0 motion-reduce:transition-none sm:ps-[5.75rem] sm:pe-6">
<p class="text-[15px] leading-relaxed text-tac05-body text-pretty">Multiplayer cursors, presence avatars and conflict-free co-editing landed across every document type. Sessions reconnect on their own, and offline edits merge cleanly when you're back.</p>
<ul class="mt-3.5 grid gap-2 text-sm text-tac05-body">
<li class="flex items-start gap-2.5"><svg aria-hidden="true" class="mt-0.5 flex-none text-tac05-acc" viewBox="0 0 16 16" width="16" height="16"><path d="m3.5 8.5 3 3 6-7" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg>Live cursors with names and selection colours</li>
<li class="flex items-start gap-2.5"><svg aria-hidden="true" class="mt-0.5 flex-none text-tac05-acc" viewBox="0 0 16 16" width="16" height="16"><path d="m3.5 8.5 3 3 6-7" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg>CRDT merge for documents, boards and tables</li>
<li class="flex items-start gap-2.5"><svg aria-hidden="true" class="mt-0.5 flex-none text-tac05-acc" viewBox="0 0 16 16" width="16" height="16"><path d="m3.5 8.5 3 3 6-7" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg>Offline queue keeps up to 2,000 pending edits</li>
</ul>
</div>
</details>
<details class="group rounded-2xl bg-tac05-card ring-1 ring-tac05-line transition-[background-color,box-shadow] duration-300 hover:ring-tac05-acc/30 open:bg-tac05-tint/45 open:shadow-tac05-open open:ring-tac05-acc/35 details-content:h-0 details-content:overflow-clip details-content:opacity-0 details-content:transition-[height,opacity,content-visibility] details-content:transition-discrete details-content:duration-500 details-content:ease-[cubic-bezier(0.22,1,0.36,1)] open:details-content:h-auto open:details-content:opacity-100 motion-reduce:transition-none motion-reduce:details-content:transition-none">
<summary class="flex min-h-16 cursor-pointer list-none items-center gap-3.5 rounded-2xl px-4 py-3 outline-none focus-visible:ring-2 focus-visible:ring-tac05-acc focus-visible:ring-offset-2 focus-visible:ring-offset-tac05-card sm:px-5 [&::-webkit-details-marker]:hidden">
<span class="w-14 flex-none rounded-lg bg-tac05-acc/10 py-1 text-center font-tac05-mono text-xs font-semibold text-tac05-acc-ink ring-1 ring-tac05-acc/20 transition-colors duration-300 group-open:bg-tac05-acc-ink group-open:text-white group-open:ring-transparent">v3.3</span>
<span class="min-w-0 flex-1">
<span class="block text-base font-bold tracking-[-0.01em]">Command palette</span>
<span class="mt-0.5 flex flex-wrap items-center gap-x-2 text-[13px] text-tac05-mut"><span>Aug 13</span><span class="inline-flex items-center gap-2 before:size-1 before:rounded-full before:bg-tac05-mut/50 before:content-[''] font-semibold text-tac05-acc-ink">New</span></span>
</span>
<span aria-hidden="true" class="grid size-8 flex-none place-items-center rounded-full bg-tac05-ink/5 text-tac05-mut transition-[rotate,background-color,color] duration-300 group-open:rotate-180 group-open:bg-tac05-acc/15 group-open:text-tac05-acc-ink motion-reduce:transition-none"><svg viewBox="0 0 16 16" width="14" height="14"><path d="M4 6.2 8 10l4-3.8" fill="none" stroke="currentColor" stroke-width="1.9" stroke-linecap="round" stroke-linejoin="round"/></svg></span>
</summary>
<div class="translate-y-1.5 px-4 pb-5 transition-transform duration-500 ease-[cubic-bezier(0.22,1,0.36,1)] group-open:translate-y-0 motion-reduce:transition-none sm:ps-[5.75rem] sm:pe-6">
<p class="text-[15px] leading-relaxed text-tac05-body text-pretty">Press <kbd class="rounded-md bg-tac05-card px-1.5 py-0.5 font-tac05-mono text-xs font-semibold text-tac05-ink shadow-[0_1px_0_oklch(0.2_0.02_170/0.18)] ring-1 ring-tac05-line">⌘K</kbd> anywhere to search actions, files and people. Fuzzy matching, recent-first ranking and full keyboard operation come out of the box.</p>
<ul class="mt-3.5 grid gap-2 text-sm text-tac05-body">
<li class="flex items-start gap-2.5"><svg aria-hidden="true" class="mt-0.5 flex-none text-tac05-acc" viewBox="0 0 16 16" width="16" height="16"><path d="m3.5 8.5 3 3 6-7" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg>Scoped search with <span class="font-tac05-mono text-[13px]">></span> for actions and <span class="font-tac05-mono text-[13px]">@</span> for people</li>
<li class="flex items-start gap-2.5"><svg aria-hidden="true" class="mt-0.5 flex-none text-tac05-acc" viewBox="0 0 16 16" width="16" height="16"><path d="m3.5 8.5 3 3 6-7" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg>Results in under 40 ms on workspaces with 100k files</li>
</ul>
</div>
</details>
<details class="group rounded-2xl bg-tac05-card ring-1 ring-tac05-line transition-[background-color,box-shadow] duration-300 hover:ring-tac05-acc/30 open:bg-tac05-tint/45 open:shadow-tac05-open open:ring-tac05-acc/35 details-content:h-0 details-content:overflow-clip details-content:opacity-0 details-content:transition-[height,opacity,content-visibility] details-content:transition-discrete details-content:duration-500 details-content:ease-[cubic-bezier(0.22,1,0.36,1)] open:details-content:h-auto open:details-content:opacity-100 motion-reduce:transition-none motion-reduce:details-content:transition-none">
<summary class="flex min-h-16 cursor-pointer list-none items-center gap-3.5 rounded-2xl px-4 py-3 outline-none focus-visible:ring-2 focus-visible:ring-tac05-acc focus-visible:ring-offset-2 focus-visible:ring-offset-tac05-card sm:px-5 [&::-webkit-details-marker]:hidden">
<span class="w-14 flex-none rounded-lg bg-tac05-acc/10 py-1 text-center font-tac05-mono text-xs font-semibold text-tac05-acc-ink ring-1 ring-tac05-acc/20 transition-colors duration-300 group-open:bg-tac05-acc-ink group-open:text-white group-open:ring-transparent">v3.2</span>
<span class="min-w-0 flex-1">
<span class="block text-base font-bold tracking-[-0.01em]">Audit log export</span>
<span class="mt-0.5 flex flex-wrap items-center gap-x-2 text-[13px] text-tac05-mut"><span>Jul 2</span><span class="inline-flex items-center gap-2 before:size-1 before:rounded-full before:bg-tac05-mut/50 before:content-[''] font-semibold text-tac05-ink">Enterprise</span></span>
</span>
<span aria-hidden="true" class="grid size-8 flex-none place-items-center rounded-full bg-tac05-ink/5 text-tac05-mut transition-[rotate,background-color,color] duration-300 group-open:rotate-180 group-open:bg-tac05-acc/15 group-open:text-tac05-acc-ink motion-reduce:transition-none"><svg viewBox="0 0 16 16" width="14" height="14"><path d="M4 6.2 8 10l4-3.8" fill="none" stroke="currentColor" stroke-width="1.9" stroke-linecap="round" stroke-linejoin="round"/></svg></span>
</summary>
<div class="translate-y-1.5 px-4 pb-5 transition-transform duration-500 ease-[cubic-bezier(0.22,1,0.36,1)] group-open:translate-y-0 motion-reduce:transition-none sm:ps-[5.75rem] sm:pe-6">
<p class="text-[15px] leading-relaxed text-tac05-body text-pretty">Admins can stream audit events to S3 or download signed CSV exports. Retention is configurable per workspace, and SOC 2 evidence bundles are one click away.</p>
<ul class="mt-3.5 grid gap-2 text-sm text-tac05-body">
<li class="flex items-start gap-2.5"><svg aria-hidden="true" class="mt-0.5 flex-none text-tac05-acc" viewBox="0 0 16 16" width="16" height="16"><path d="m3.5 8.5 3 3 6-7" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg>Hourly S3 delivery with SHA-256 manifests</li>
<li class="flex items-start gap-2.5"><svg aria-hidden="true" class="mt-0.5 flex-none text-tac05-acc" viewBox="0 0 16 16" width="16" height="16"><path d="m3.5 8.5 3 3 6-7" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg>Retention from 90 days to 7 years</li>
</ul>
</div>
</details>
</div>
<footer class="mt-6 flex flex-wrap items-center justify-between gap-3 border-t border-tac05-line pt-5 text-sm text-tac05-mut">
<span>Showing 3 of 28 releases</span>
<button type="button" class="-mx-2 inline-flex min-h-11 items-center gap-1.5 rounded-lg px-2 font-semibold text-tac05-acc-ink transition-colors hover:text-tac05-ink focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-tac05-acc">View full archive <span aria-hidden="true">→</span></button>
</footer>
</article>
<p aria-hidden="true" class="rounded-full bg-tac05-card/70 px-3.5 py-2 text-center font-tac05-mono text-[11.5px] text-tac05-mut ring-1 ring-tac05-ink/8">details-content:h-0 · open:details-content:h-auto · [interpolate-size:allow-keywords]</p>
</div>
</section>
```
## CSS
```css
@import "tailwindcss";
@theme {
--color-tac05-bg: #f3f8f6;
--color-tac05-bg: oklch(0.975 0.006 165);
--color-tac05-glow: #d8f7e6;
--color-tac05-glow: oklch(0.95 0.04 162);
--color-tac05-card: #ffffff;
--color-tac05-card: oklch(1 0 0);
--color-tac05-tint: #ebfaf2;
--color-tac05-tint: oklch(0.975 0.022 162);
--color-tac05-line: #e2e9e6;
--color-tac05-line: oklch(0.93 0.008 170);
--color-tac05-ink: #111e19;
--color-tac05-ink: oklch(0.22 0.02 170);
--color-tac05-body: #3a4843;
--color-tac05-body: oklch(0.39 0.018 170);
--color-tac05-mut: #505f59;
--color-tac05-mut: oklch(0.47 0.02 170);
--color-tac05-acc: #00a76f;
--color-tac05-acc: oklch(0.64 0.15 162);
--color-tac05-acc-ink: #00774d;
--color-tac05-acc-ink: oklch(0.5 0.12 162);
--font-tac05-sans: 'Manrope', system-ui, sans-serif;
--font-tac05-mono: 'Geist Mono', ui-monospace, monospace;
--shadow-tac05-card: 0 1px 2px oklch(0.3 0.03 170 / 0.06), 0 24px 60px -28px oklch(0.35 0.06 165 / 0.3);
--shadow-tac05-open: 0 1px 2px oklch(0.4 0.08 162 / 0.08), 0 14px 32px -16px oklch(0.5 0.12 162 / 0.35);
}
/* Root rule: the full-bleed contract, stated in CSS as well as in the markup's utilities, so the
stage is sized before the browser build compiles. */
.tac-05 {
width: 100%;
min-height: 100svh;
}
```Here's a working CSS demo from CodeFronts. Use it as-is or adapt to your framework. All classes are scoped under a unique prefix so the code won't collide with your existing styles. MIT licensed.
Demo: Smooth Animated Tailwind Accordion with Height Transition
Source: https://codefronts.com/navigation/tailwind-css-accordions/smooth-animated-tailwind-accordion-height-transition/
The most-searched accordion problem, solved entirely in class lists: a native <details> changelog that slides open and closed with a real height: auto transition. Tailwind v4's details-content: variant styles the ::details-content box, [interpolate-size:allow-keywords] on the root makes auto animatable, and transition-discrete holds the content visible until the close finishes.
## HTML
```html
<section class="tac-05 w-full min-h-svh grid place-items-center bg-tac05-bg bg-[radial-gradient(70%_55%_at_50%_0%,var(--color-tac05-glow),transparent_72%)] px-5 py-14 font-tac05-sans text-tac05-ink [interpolate-size:allow-keywords]" aria-label="Smooth animated accordion with height transition demo">
<div class="grid w-full justify-items-center gap-7">
<article class="w-full max-w-2xl rounded-[28px] bg-tac05-card p-[clamp(20px,4.5vw,36px)] shadow-tac05-card ring-1 ring-tac05-ink/6">
<header class="mb-7 flex flex-wrap items-end justify-between gap-x-6 gap-y-4">
<div class="min-w-0">
<p class="inline-flex items-center gap-2 rounded-full bg-tac05-tint px-3 py-1 text-xs font-bold tracking-[0.08em] uppercase text-tac05-acc-ink ring-1 ring-tac05-acc/20">
<span aria-hidden="true" class="relative flex size-2"><span class="absolute inset-0 animate-ping rounded-full bg-tac05-acc/60 motion-reduce:hidden"></span><span class="relative size-2 rounded-full bg-tac05-acc"></span></span>
Changelog · Q3 2026
</p>
<h2 class="mt-3.5 text-[clamp(24px,3.8vw,31px)] leading-tight font-extrabold tracking-[-0.03em] text-balance">What shipped this quarter</h2>
<p class="mt-1.5 text-[15px] text-tac05-mut">Three releases, forty-one fixes, zero breaking changes.</p>
</div>
<button type="button" class="inline-flex min-h-11 items-center gap-2 rounded-full bg-tac05-ink px-4.5 text-sm font-semibold text-white shadow-[0_1px_2px_oklch(0.2_0.02_170/0.3)] transition-[background-color,translate] duration-200 hover:-translate-y-px hover:bg-tac05-acc-ink focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-tac05-acc motion-reduce:transition-none">
<svg aria-hidden="true" viewBox="0 0 20 20" width="16" height="16"><path d="M4 10.5a5.5 5.5 0 0 1 5.5 5.5M4 5a11 11 0 0 1 11 11" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"/><circle cx="4.6" cy="15.4" r="1.4" fill="currentColor"/></svg>
Subscribe
</button>
</header>
<div class="grid gap-3">
<details class="group rounded-2xl bg-tac05-card ring-1 ring-tac05-line transition-[background-color,box-shadow] duration-300 hover:ring-tac05-acc/30 open:bg-tac05-tint/45 open:shadow-tac05-open open:ring-tac05-acc/35 details-content:h-0 details-content:overflow-clip details-content:opacity-0 details-content:transition-[height,opacity,content-visibility] details-content:transition-discrete details-content:duration-500 details-content:ease-[cubic-bezier(0.22,1,0.36,1)] open:details-content:h-auto open:details-content:opacity-100 motion-reduce:transition-none motion-reduce:details-content:transition-none" open>
<summary class="flex min-h-16 cursor-pointer list-none items-center gap-3.5 rounded-2xl px-4 py-3 outline-none focus-visible:ring-2 focus-visible:ring-tac05-acc focus-visible:ring-offset-2 focus-visible:ring-offset-tac05-card sm:px-5 [&::-webkit-details-marker]:hidden">
<span class="w-14 flex-none rounded-lg bg-tac05-acc/10 py-1 text-center font-tac05-mono text-xs font-semibold text-tac05-acc-ink ring-1 ring-tac05-acc/20 transition-colors duration-300 group-open:bg-tac05-acc-ink group-open:text-white group-open:ring-transparent">v3.4</span>
<span class="min-w-0 flex-1">
<span class="block text-base font-bold tracking-[-0.01em]">Realtime collaboration</span>
<span class="mt-0.5 flex flex-wrap items-center gap-x-2 text-[13px] text-tac05-mut"><span>Sep 24</span><span class="inline-flex items-center gap-2 before:size-1 before:rounded-full before:bg-tac05-mut/50 before:content-[''] font-semibold text-tac05-acc-ink">New</span></span>
</span>
<span aria-hidden="true" class="grid size-8 flex-none place-items-center rounded-full bg-tac05-ink/5 text-tac05-mut transition-[rotate,background-color,color] duration-300 group-open:rotate-180 group-open:bg-tac05-acc/15 group-open:text-tac05-acc-ink motion-reduce:transition-none"><svg viewBox="0 0 16 16" width="14" height="14"><path d="M4 6.2 8 10l4-3.8" fill="none" stroke="currentColor" stroke-width="1.9" stroke-linecap="round" stroke-linejoin="round"/></svg></span>
</summary>
<div class="translate-y-1.5 px-4 pb-5 transition-transform duration-500 ease-[cubic-bezier(0.22,1,0.36,1)] group-open:translate-y-0 motion-reduce:transition-none sm:ps-[5.75rem] sm:pe-6">
<p class="text-[15px] leading-relaxed text-tac05-body text-pretty">Multiplayer cursors, presence avatars and conflict-free co-editing landed across every document type. Sessions reconnect on their own, and offline edits merge cleanly when you're back.</p>
<ul class="mt-3.5 grid gap-2 text-sm text-tac05-body">
<li class="flex items-start gap-2.5"><svg aria-hidden="true" class="mt-0.5 flex-none text-tac05-acc" viewBox="0 0 16 16" width="16" height="16"><path d="m3.5 8.5 3 3 6-7" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg>Live cursors with names and selection colours</li>
<li class="flex items-start gap-2.5"><svg aria-hidden="true" class="mt-0.5 flex-none text-tac05-acc" viewBox="0 0 16 16" width="16" height="16"><path d="m3.5 8.5 3 3 6-7" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg>CRDT merge for documents, boards and tables</li>
<li class="flex items-start gap-2.5"><svg aria-hidden="true" class="mt-0.5 flex-none text-tac05-acc" viewBox="0 0 16 16" width="16" height="16"><path d="m3.5 8.5 3 3 6-7" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg>Offline queue keeps up to 2,000 pending edits</li>
</ul>
</div>
</details>
<details class="group rounded-2xl bg-tac05-card ring-1 ring-tac05-line transition-[background-color,box-shadow] duration-300 hover:ring-tac05-acc/30 open:bg-tac05-tint/45 open:shadow-tac05-open open:ring-tac05-acc/35 details-content:h-0 details-content:overflow-clip details-content:opacity-0 details-content:transition-[height,opacity,content-visibility] details-content:transition-discrete details-content:duration-500 details-content:ease-[cubic-bezier(0.22,1,0.36,1)] open:details-content:h-auto open:details-content:opacity-100 motion-reduce:transition-none motion-reduce:details-content:transition-none">
<summary class="flex min-h-16 cursor-pointer list-none items-center gap-3.5 rounded-2xl px-4 py-3 outline-none focus-visible:ring-2 focus-visible:ring-tac05-acc focus-visible:ring-offset-2 focus-visible:ring-offset-tac05-card sm:px-5 [&::-webkit-details-marker]:hidden">
<span class="w-14 flex-none rounded-lg bg-tac05-acc/10 py-1 text-center font-tac05-mono text-xs font-semibold text-tac05-acc-ink ring-1 ring-tac05-acc/20 transition-colors duration-300 group-open:bg-tac05-acc-ink group-open:text-white group-open:ring-transparent">v3.3</span>
<span class="min-w-0 flex-1">
<span class="block text-base font-bold tracking-[-0.01em]">Command palette</span>
<span class="mt-0.5 flex flex-wrap items-center gap-x-2 text-[13px] text-tac05-mut"><span>Aug 13</span><span class="inline-flex items-center gap-2 before:size-1 before:rounded-full before:bg-tac05-mut/50 before:content-[''] font-semibold text-tac05-acc-ink">New</span></span>
</span>
<span aria-hidden="true" class="grid size-8 flex-none place-items-center rounded-full bg-tac05-ink/5 text-tac05-mut transition-[rotate,background-color,color] duration-300 group-open:rotate-180 group-open:bg-tac05-acc/15 group-open:text-tac05-acc-ink motion-reduce:transition-none"><svg viewBox="0 0 16 16" width="14" height="14"><path d="M4 6.2 8 10l4-3.8" fill="none" stroke="currentColor" stroke-width="1.9" stroke-linecap="round" stroke-linejoin="round"/></svg></span>
</summary>
<div class="translate-y-1.5 px-4 pb-5 transition-transform duration-500 ease-[cubic-bezier(0.22,1,0.36,1)] group-open:translate-y-0 motion-reduce:transition-none sm:ps-[5.75rem] sm:pe-6">
<p class="text-[15px] leading-relaxed text-tac05-body text-pretty">Press <kbd class="rounded-md bg-tac05-card px-1.5 py-0.5 font-tac05-mono text-xs font-semibold text-tac05-ink shadow-[0_1px_0_oklch(0.2_0.02_170/0.18)] ring-1 ring-tac05-line">⌘K</kbd> anywhere to search actions, files and people. Fuzzy matching, recent-first ranking and full keyboard operation come out of the box.</p>
<ul class="mt-3.5 grid gap-2 text-sm text-tac05-body">
<li class="flex items-start gap-2.5"><svg aria-hidden="true" class="mt-0.5 flex-none text-tac05-acc" viewBox="0 0 16 16" width="16" height="16"><path d="m3.5 8.5 3 3 6-7" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg>Scoped search with <span class="font-tac05-mono text-[13px]">></span> for actions and <span class="font-tac05-mono text-[13px]">@</span> for people</li>
<li class="flex items-start gap-2.5"><svg aria-hidden="true" class="mt-0.5 flex-none text-tac05-acc" viewBox="0 0 16 16" width="16" height="16"><path d="m3.5 8.5 3 3 6-7" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg>Results in under 40 ms on workspaces with 100k files</li>
</ul>
</div>
</details>
<details class="group rounded-2xl bg-tac05-card ring-1 ring-tac05-line transition-[background-color,box-shadow] duration-300 hover:ring-tac05-acc/30 open:bg-tac05-tint/45 open:shadow-tac05-open open:ring-tac05-acc/35 details-content:h-0 details-content:overflow-clip details-content:opacity-0 details-content:transition-[height,opacity,content-visibility] details-content:transition-discrete details-content:duration-500 details-content:ease-[cubic-bezier(0.22,1,0.36,1)] open:details-content:h-auto open:details-content:opacity-100 motion-reduce:transition-none motion-reduce:details-content:transition-none">
<summary class="flex min-h-16 cursor-pointer list-none items-center gap-3.5 rounded-2xl px-4 py-3 outline-none focus-visible:ring-2 focus-visible:ring-tac05-acc focus-visible:ring-offset-2 focus-visible:ring-offset-tac05-card sm:px-5 [&::-webkit-details-marker]:hidden">
<span class="w-14 flex-none rounded-lg bg-tac05-acc/10 py-1 text-center font-tac05-mono text-xs font-semibold text-tac05-acc-ink ring-1 ring-tac05-acc/20 transition-colors duration-300 group-open:bg-tac05-acc-ink group-open:text-white group-open:ring-transparent">v3.2</span>
<span class="min-w-0 flex-1">
<span class="block text-base font-bold tracking-[-0.01em]">Audit log export</span>
<span class="mt-0.5 flex flex-wrap items-center gap-x-2 text-[13px] text-tac05-mut"><span>Jul 2</span><span class="inline-flex items-center gap-2 before:size-1 before:rounded-full before:bg-tac05-mut/50 before:content-[''] font-semibold text-tac05-ink">Enterprise</span></span>
</span>
<span aria-hidden="true" class="grid size-8 flex-none place-items-center rounded-full bg-tac05-ink/5 text-tac05-mut transition-[rotate,background-color,color] duration-300 group-open:rotate-180 group-open:bg-tac05-acc/15 group-open:text-tac05-acc-ink motion-reduce:transition-none"><svg viewBox="0 0 16 16" width="14" height="14"><path d="M4 6.2 8 10l4-3.8" fill="none" stroke="currentColor" stroke-width="1.9" stroke-linecap="round" stroke-linejoin="round"/></svg></span>
</summary>
<div class="translate-y-1.5 px-4 pb-5 transition-transform duration-500 ease-[cubic-bezier(0.22,1,0.36,1)] group-open:translate-y-0 motion-reduce:transition-none sm:ps-[5.75rem] sm:pe-6">
<p class="text-[15px] leading-relaxed text-tac05-body text-pretty">Admins can stream audit events to S3 or download signed CSV exports. Retention is configurable per workspace, and SOC 2 evidence bundles are one click away.</p>
<ul class="mt-3.5 grid gap-2 text-sm text-tac05-body">
<li class="flex items-start gap-2.5"><svg aria-hidden="true" class="mt-0.5 flex-none text-tac05-acc" viewBox="0 0 16 16" width="16" height="16"><path d="m3.5 8.5 3 3 6-7" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg>Hourly S3 delivery with SHA-256 manifests</li>
<li class="flex items-start gap-2.5"><svg aria-hidden="true" class="mt-0.5 flex-none text-tac05-acc" viewBox="0 0 16 16" width="16" height="16"><path d="m3.5 8.5 3 3 6-7" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg>Retention from 90 days to 7 years</li>
</ul>
</div>
</details>
</div>
<footer class="mt-6 flex flex-wrap items-center justify-between gap-3 border-t border-tac05-line pt-5 text-sm text-tac05-mut">
<span>Showing 3 of 28 releases</span>
<button type="button" class="-mx-2 inline-flex min-h-11 items-center gap-1.5 rounded-lg px-2 font-semibold text-tac05-acc-ink transition-colors hover:text-tac05-ink focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-tac05-acc">View full archive <span aria-hidden="true">→</span></button>
</footer>
</article>
<p aria-hidden="true" class="rounded-full bg-tac05-card/70 px-3.5 py-2 text-center font-tac05-mono text-[11.5px] text-tac05-mut ring-1 ring-tac05-ink/8">details-content:h-0 · open:details-content:h-auto · [interpolate-size:allow-keywords]</p>
</div>
</section>
```
## CSS
```css
@import "tailwindcss";
@theme {
--color-tac05-bg: #f3f8f6;
--color-tac05-bg: oklch(0.975 0.006 165);
--color-tac05-glow: #d8f7e6;
--color-tac05-glow: oklch(0.95 0.04 162);
--color-tac05-card: #ffffff;
--color-tac05-card: oklch(1 0 0);
--color-tac05-tint: #ebfaf2;
--color-tac05-tint: oklch(0.975 0.022 162);
--color-tac05-line: #e2e9e6;
--color-tac05-line: oklch(0.93 0.008 170);
--color-tac05-ink: #111e19;
--color-tac05-ink: oklch(0.22 0.02 170);
--color-tac05-body: #3a4843;
--color-tac05-body: oklch(0.39 0.018 170);
--color-tac05-mut: #505f59;
--color-tac05-mut: oklch(0.47 0.02 170);
--color-tac05-acc: #00a76f;
--color-tac05-acc: oklch(0.64 0.15 162);
--color-tac05-acc-ink: #00774d;
--color-tac05-acc-ink: oklch(0.5 0.12 162);
--font-tac05-sans: 'Manrope', system-ui, sans-serif;
--font-tac05-mono: 'Geist Mono', ui-monospace, monospace;
--shadow-tac05-card: 0 1px 2px oklch(0.3 0.03 170 / 0.06), 0 24px 60px -28px oklch(0.35 0.06 165 / 0.3);
--shadow-tac05-open: 0 1px 2px oklch(0.4 0.08 162 / 0.08), 0 14px 32px -16px oklch(0.5 0.12 162 / 0.35);
}
/* Root rule: the full-bleed contract, stated in CSS as well as in the markup's utilities, so the
stage is sized before the browser build compiles. */
.tac-05 {
width: 100%;
min-height: 100svh;
}
```How this works
Two platform features, both reachable from utilities. ::details-content is the box the browser wraps around everything after the summary; Tailwind v4 ships a details-content: variant for it. interpolate-size is a plain property, so it is an arbitrary utility on the root and inherits down:
<section class="[interpolate-size:allow-keywords]">
<details class="details-content:h-0 details-content:overflow-clip
details-content:opacity-0 open:details-content:h-auto open:details-content:opacity-100
details-content:transition-[height,opacity,content-visibility]
details-content:transition-discrete details-content:duration-500">Why closing works. On close the browser flips the content box to content-visibility: hidden, which would hide it instantly. Listing content-visibility in the transition and adding transition-discrete (transition-behavior: allow-discrete) delays that flip until the height has reached zero, so the panel visibly collapses. Without support for either feature the accordion simply opens instantly — the correct fallback.
Make it yours
- Speed and feel: change
details-content:duration-500and theease-[cubic-bezier(0.22,1,0.36,1)]curve; keep the two in step with the body'sduration-500. - Site-wide: move
[interpolate-size:allow-keywords]to<html>and everyh-autotransition on the page starts working. - Exclusive mode: add a shared
name="tac05-log"to the three<details>— the browser-closed item animates shut with the same utilities. - Re-theme: edit
--color-tac05-acc/--color-tac05-acc-ink; badges, rings, tint and chevron all follow.
Gotchas — read before shipping
interpolate-sizeis opt-in by design — leave it off and the height jumps. It inherits, so one declaration on the root is enough.- Use
details-content:overflow-clip, notoverflow-hidden: hidden makes the content box a scroll container that can trap find-in-page scrolling. - Don't also wrap the body in a
grid-rows-[0fr]hack — two height animations on one panel fight each other. - Padding belongs on the inner
<div>, not on::details-content: padding on ah-0box would leave a visible sliver when closed.
Browser support
| Chrome | Safari | Firefox | Edge |
|---|---|---|---|
| 129+ | not yet | not yet | 129+ |
Floor set by oklch(), interpolate-size as this demo is written. The core technique itself goes back further — Chrome 111+.
The height animation needs ::details-content + interpolate-size (Chrome 131+; Safari and Firefox are rolling it out). Everywhere else the panels toggle instantly and remain fully usable; the floor is Tailwind v4's own sheet.