Griglia · anchor · no-overlap

Durante il drag vedi una griglia a celle. Release sulla cella. Se occupata, il sistema trova il primo slot libero.

La parte destra usa una griglia invisibile (celle 60×60 px con gap 4 px) che compare solo durante il drag. Il drop ancora la card al top-left della cella più vicina al puntatore — niente sovrapposizioni, niente disallineamenti.

Se la cella scelta è già occupata da un'altra pinnata, parte un algoritmo BFS che trova il primo slot libero compatibile con la forma della card (larghezza 6 celle fisse, altezza dinamica). La card viene depositata lì senza chiederti di risolvere manualmente.

L'altezza viene calcolata con ResizeObserver e snap-pata al multiplo di cella più vicino: le pinnate hanno sempre bordi allineati. La combinazione di anchor, BFS e snap fa sì che la griglia di destra resti visivamente ordinata anche dopo molte pinnate.