Lo más probable es que usen JavaScript, pero esto se logra usando HTML sin procesar con details y elementos de summary . Aquí hay una breve implementación:
/* removes the default marker */ details summary::-webkit-details-marker, details summary::marker { display: none; content: ""; } details { display: block; border: 3px solid black; margin-bottom: 2rem; } summary { padding: 1rem; cursor: pointer; } details[open] summary { border-bottom: 3px solid black; } <details> <summary>Some text blablabla +</summary> <ol> <li>asdf 1</li> <li>asdf 2</li> <li>asdf 3</li> </ol> </details> <details> <summary>Some text blablabla +</summary> <ol> <li>asdf 1</li> <li>asdf 2</li> <li>asdf 3</li> </ol> </details> <details> <summary>Some text blablabla +</summary> <ol> <li>asdf 1</li> <li>asdf 2</li> <li>asdf 3</li> </ol> </details>