Media queries belong at the breakpoint, not at the device

Breakpoints written as 320, 768 and 1024 are named after three devices that were current when the stylesheet was written. The layout does not break at those widths; it breaks where the navigation wraps or the sidebar stops earning its column, and those numbers are different for every design.

/* device-shaped: obsolete the day a phone ships at a new width */
@media (min-width: 320px)  { }
@media (min-width: 768px)  { }
@media (min-width: 1024px) { }

/* breakpoint-shaped: named for what changes, sized in em */
@media (min-width: 30em)   { /* the nav fits on one line */ }
@media (min-width: 46.5em) { /* the sidebar earns its column */ }

The way to find them is to narrow the browser until something looks wrong and write the query there, which usually produces four or five odd-looking numbers rather than three round ones. Sizing them in em is the part worth knowing: inside a media query em resolves against the browser’s initial font size, not against anything declared on html, so html { font-size: 62.5% } leaves the breakpoints where they were. A reader at 150% text size then gets the layout that fits the text, which a pixel breakpoint will never give them. The cost is that the number in the stylesheet no longer matches the number in the design file.