Faits : A. Par contrat du 1 er août 2007, A._ (bailleresse) a remis à bail un local d'environ cinquante mètres carrés, sis à X._ et utilisé comme entrepôt, à une locataire ultérieurement remplacée par la société B._ SA. Le contrat de bail, qui prévoit un loyer mensuel de 350 fr., désigne l'objet loué comme il suit: "les locaux suivants sis dans la maison, env. 50 m 2,.. à utiliser comme ... entrepôt." Par formule officielle du 19 avril 2011, la bailleresse a résilié le bail au 31 octobre 2011 pour cause de "travaux"; la locataire n'a pas contesté le congé ni requis une prolongation du bail. Le 20 juillet 2011, la locataire a demandé une ristourne de loyer de 200 fr. ensuite de désagréments causés par des travaux de la bailleresse. Celle-ci a réagi par une lettre du 16 août 2011 contenant les réflexions suivantes: le bail porte sur une surface "d'env. 50 m 2 au sol"; il a été convenu de ne rien entreposer sur les deux plateformes situées en hauteur sur la gauche et la droite du local; cet accord n'a pas été respecté, ce qui justifie une majoration de loyer de 200 fr. par mois avec effet rétroactif au 1 er juillet [sic!] 2007; est en outre exigée la restitution d'un marteau-piqueur. Une rencontre entre les parties a eu lieu le 23 août 2011. Elle s'est soldée par un échec; le compagnon de la bailleresse s'est plaint d'avoir reçu un coup de poing à cette occasion. Par avis du 25 août 2011, la bailleresse a signifié une nouvelle résiliation du contrat, cette fois avec effet "immédiat", en agendant la remise des clés au 2 septembre 2011; elle a en outre augmenté sa prétention pour l'utilisation des plateformes à 300 fr. par mois. La bailleresse ne s'est pas présentée dans les locaux le 2 septembre 2011. La locataire lui a écrit le jour même qu'elle considérait la remise comme acceptée et qu'elle laissait les clés sur place. La bailleresse a justifié son absence par un "événement imprévu" et fixé une nouvelle date pour l'état des lieux, soit le 16 septembre 2011; la locataire ne s'est pas présentée. La bailleresse lui a alors imparti un délai au 27 septembre 2011 pour nettoyer le local et lui remettre les clés en mains propres; la locataire n'a pas donné suite. Par courrier du 18 octobre 2011, la bailleresse a requis la locataire de lui payer la somme de 18'050 fr., à savoir 14'700 fr. pour l'utilisation des plateformes (50 mois à 294 fr. par mois), 350 fr. pour le loyer de septembre 2011, 1'500 fr. pour le marteau-piqueur et 1'500 fr. de forfait (échelle cassée, cylindre changé, nettoyage). Le 13 janvier 2012, elle a introduit une poursuite; la locataire a fait opposition. B. Le 30 mai 2012, la bailleresse a ouvert action contre la locataire en paiement de 18'050 fr. Par jugement du 22 août 2013, le Tribunal régional du Jura bernois-Seeland a rejeté la demande. La bailleresse s'est pourvue en appel. Par arrêt du 14 juillet 2014, la Cour suprême du canton de Berne (2 e Chambre civile) a refusé d'entrer en matière sur l'appel en tant qu'il concluait au paiement de 1'500 fr. pour le marteau-piqueur disparu; pour le surplus, elle a rejeté l'appel, et partant la demande; les frais et dépens de première et deuxième instance ont été mis à la charge de la bailleresse. C. La bailleresse (recourante) saisit le Tribunal fédéral d'un recours en matière civile, concluant à ce que la locataire (intimée) soit condamnée à lui payer 18'050 fr. avec intérêt à 5% l'an dès le 26 octobre 2011, sous suite de frais et dépens. Dans sa réponse, l'intimée conclut au rejet du recours dans la mesure de sa recevabilité. Chaque partie a par la suite déposé une seconde écriture. L'autorité précédente se réfère à son arrêt.