About Flexbox Playground
The properties are the ones people mix up: justify-content works along the main axis and align-items across it, and which axis is which flips the moment flex-direction becomes column. Changing direction here and watching the same alignment settle on the other axis is the quickest way to make that stick. Click a box to give it flex-grow and see how the leftover space is shared.
Every property a flex container takes is a control on the left: direction, wrap, justify-content, align-items, align-content and the gap, plus a slider for how many boxes to lay out. The preview on the right is a real flex container with those properties applied as inline styles, so what moves is the browser's own layout engine and not a picture of it. The CSS and Tailwind panes are generated from the same state the preview reads, which is why the two never disagree.
Clicking a box gives it flex-grow, stepping through 0, 1, 2 and 3. Growth is the property most people learn by accident: the values are ratios of the leftover space, so a box with 2 and a box with 1 split the spare room two-to-one, and a single growing box takes all of it. Watching the others hold their size while one stretches is more instructive than the specification's sentence about it.
Direction is where intuition breaks. Switch from row to column and 'center' on justify-content stops centring horizontally and starts centring vertically, while the boxes you had spaced across the width now stack — the property did not change, the axis it acts on did. The playground keeps every other setting when you change direction precisely so that you can see this happen to a layout you already understand.
Wrapping brings align-content into play, and only then. With a single line of boxes align-content does nothing, which is why it is the property that seems broken until you realise it distributes lines, not items. Turn wrap on, raise the item count until a second line appears, and the align-content control starts to matter.