La mayoría de los componentes de pestañas que ves por ahí cargan kilobytes de JavaScript para algo que el navegador ya sabe hacer: gestionar un estado seleccionado entre varias opciones. Eso es, literalmente, un grupo de radio buttons.

La idea

Cada pestaña es un <label> asociado a un <input type="radio"> oculto. Cuando el radio se marca, el CSS reacciona y muestra el panel correspondiente. Cero JS, y de regalo obtienes navegación con flechas del teclado, que el grupo de radios trae de serie.

<label for="tab1">Pestaña 1</label>
<input id="tab1" name="tabs" type="radio" class="sr-only peer" checked />

El truco: :has()

El panel cambia de estilo según si el input hermano está marcado:

label:has(+ input:checked) {
  color: white;
  background: var(--primary);
}

:has(+ input:checked) se lee como “este label que tiene, justo después, un input marcado”. Es CSS mirando hacia adelante.

Accesibilidad real

Como el input sigue siendo enfocable (sr-only, no display:none), el teclado funciona. Solo recuerda añadir un anillo de foco visible:

label:has(+ input:focus-visible) {
  outline: 2px solid var(--primary);
}

Conclusión

Antes de instalar una librería, pregúntate si el navegador ya resuelve el problema. En este caso, una <input> y un selector moderno te ahorran todo el runtime.