#Python 3, 306 299 265 253 255 252 247 244 bytes#
Python 3, 306 299 265 253 255 252 247 244 bytes
Quick attempt, could be optimised
Edit: -2 bytes thanks to @MrXcoder
Edit: -32 bytes as trailing spaces is not needed
Edit: -12 bytes by combining the two functions
Edit: -5 bytes thanks to @musicman523
Edit: +7 bytes to remove the shelf after the last row
Edit: -3 bytes
Edit: -5 bytes due to a lambda function only being used once in a map
Edit: -3 bytes by using the string function center
def l(y,x=13,z=" "):b=min(x,91-y);A,D=" |%s| ","|-----|";print(y<91and(l(y+x,x-1)or"".join(map(lambda t:((t+z)*b)[:-1].center(103)+"\n",(A%"=",A%z,A%z," / \ ",". .",D,"| |",D,"|_____|")))+z*(49-4*x)+"="*(x*8+5)*(x<13))or(x>12)*":(")