Luka Modrić, 38, såg ut att ha skjutit Kroatien till åttondelsfinal.
Men Italien kvitterade – i den 98:e minuten.
– Ibland är fotbollen brutal, säger Modrić efteråt.
29-årige Lazioanfallaren och inhopparen Mattia Zaccagni satte 1–1-målet i den 98:e matchminuten.
Den 22-årige Bolognamittbacken var den som drev upp bollen i planen när Italien frenetiskt jagade kvittering i slutet på matchen. Calafiori spelade ut bollen till vänster och Zaccagni skruvade snyggt in den med högern bakom en förtvivlad Dominik Livakovic i det kroatiska målet.
Kroatien var bara sekunder från att säkra en plats i åttondelsfinalen i mötet med Italien. Efter en mållös första halvlek fick Kroatien straff i början av andra sedan Davide Frattesi fått bollen på handen i Italiens straffområde och kroaterna tilldömts straffen efter videogranskning.
Lagkapten Luka Modric klev fram och slog en lågt slagen straff som Gianluigi Donnarumma räddade vid sin vänstra stolpe. Men bara 32 sekunder efter straffmissen fick 38-årige Modric sin revansch när han sköt 1–0 på det efterföljande anfallet sedan Donnarumma först räddat avslutet från Ante Budimir men släppt en retur som Modric satte.
Modric blev sedan utbytt och såg Italiens sena kvittering från sidlinjen. För Italien väntar härnäst Schweiz i åttondelsfinalen i Berlin på lördag.