Faits:
A.
Y._ SA et X._ S.A., toutes deux actives dans le domaine du bâtiment, ont signé le 18 mai 2009 un contrat de sous-traitance par lequel la première confiait à la seconde l'exécution de certains travaux sur un chantier genevois (...). Il était notamment convenu de fixer les prix sur la base d'un prix ferme de 31 fr. par mètre-carré contradictoire, respectivement de 50 fr. par heure pour les travaux en régie dûment approuvés par la direction des travaux. Des acomptes pouvaient être demandés pour les travaux déjà réalisés. Un projet de facture, assorti d'un décompte des métrés pour approbation, devait être établi dix jours avant la fin estimée des travaux; sur la base de ce projet, il serait procédé à un métré contradictoire et à la réception des travaux en présence des deux parties.
Durant les travaux, X._ a transmis à Y._ plusieurs documents intitulés "facture" pour un total de 151'715 fr. Y._ a payé 118'738 fr. Le 10 novembre 2009, X._ a envoyé à Y._ un "décompte final" relevant un solde impayé de 32'977 fr. 25; y était joint un document intitulé "métrage total ...". Y._ a répondu que ce document n'était pas "sérieux"; elle a produit son propre décompte dans lequel elle admettait un solde à payer de 824 fr. 95 et opposait en compensation des créances ensuite de malfaçons.
B.
B.a. Le 17 mars 2010, X._ a ouvert action contre Y._ en paiement de 32'977 fr. 25 devant le Tribunal de première instance du canton de Genève. Elle alléguait qu'après le début des travaux, les parties avaient tacitement convenu de calculer le prix de certaines prestations non pas en fonction des métrés, mais sur une base horaire. Y._ a conclu au rejet; elle contestait en particulier toute modification du contrat quant au mode de rémunération. Par jugement du 27 août 2012, le juge de première instance a condamné Y._ à payer à X._ la somme de 32'977 fr. 25 avec intérêts à 5% dès le 16 décembre 2009.
B.b. Statuant sur appel par arrêt du 22 février 2013, la Chambre civile de la Cour de justice genevoise a modifié le jugement en ce sens que Y._ est condamnée à payer la somme de 824 fr. 95 avec intérêts à 5% dès le 16 octobre 2009, la demande de X._ étant rejetée pour le surplus. Les motifs de cette décision peuvent se résumer comme il suit: tout d'abord, il convenait d'écarter la thèse d'une modification du contrat initial relative à la rémunération; les diverses notes intitulées "facture" présentées en cours de travaux par X._ étaient en réalité des demandes d'avances. En versant une partie des montants ainsi demandés, Y._ n'avait pas admis l'établissement de factures intermédiaires, et donc de paiements intermédiaires en dérogation du contrat initial. Ensuite, X._ n'avait pas pu établir que la quotité du travail (en métrés ou en régie) prétendument effectué avait été approuvée par Y._; il n'existait pas de bons de régie signés par Y._ et X._ n'avait pas transmis de décompte des métrés à la fin du chantier. En conséquence, l'on ne pouvait retenir que Y._ était tenue de rémunérer le solde réclamé par X._, sous réserve du montant reconnu de 824 fr. 95.
C.
Par-devant le Tribunal fédéral, X._ (ci-après: la recourante) interjette un recours en matière civile, concluant à l'annulation de l'arrêt sur appel du 22 février 2013 et à la confirmation du jugement de première instance rendu le 27 août 2012. Y._ (ci-après: l'intimée) conclut au déboutement de la recourante.

Considérant en droit:
1.
Le Tribunal fédéral statue sur la base des faits établis par l'autorité précédente (<ref-law>), sauf si cette dernière est tombée dans l'arbitraire (art. 95, 97 al. 1 et 105 al. 2 LTF; <ref-ruling> consid. 5.1, 129 I 8 consid. 2.1), ce qu'il appartient au recourant de démontrer (<ref-ruling> consid. 1.4.2 et 1.4.3).
Le mémoire de recours débute par un long exposé des faits de la cause avec renvoi aux moyens de preuve correspondants. Le Tribunal fédéral n'établissant pas les faits, cette partie est inutile; il n'y a pas lieu de s'y arrêter. Puis, sous les titres de l'établissement inexact des faits et de l'abus du pouvoir d'appréciation, la recourante critique certaines constatations opérées par l'autorité d'appel, notamment le fait que certains métrés n'ont pas été établis de manière contradictoire et que les "factures" intermédiaires ne sont que des demandes d'acomptes. Dans sa motivation, la recourante explique comment les preuves devraient à son avis être appréciées; elle se limite à une critique de type appellatoire et ne démontre pas en quoi l'appréciation portée par le juge d'appel serait manifestement insoutenable. Au demeurant, à la lecture de l'arrêt attaqué auquel il peut être renvoyé, les conclusions du juge d'appel apparaissent parfaitement concevables.
2.
La recourante se plaint ensuite d'une violation du principe de la confiance en relation avec la prétendue modification du contrat de sous-traitance sur la question de la rémunération; il s'agit d'une question de droit (<ref-ruling> consid. 3.2.1 p. 188). En réalité, la recourante soulève pour l'essentiel des griefs relatifs à la volonté subjective des parties, à savoir une question de fait soustraite à la connaissance du Tribunal fédéral. En droit, il s'agit uniquement de savoir si la recourante pouvait de bonne foi déduire du comportement de l'intimée que cette dernière avait accepté une modification du contrat. Or, le seul fait que l'intimée a versé une partie des montants figurant dans des documents intitulés "facture" sans faire de réserve ni de contestation ne conduisait objectivement pas à la conclusion que l'intimée avait ratifié une modification du contrat en ce sens qu'elle réglait non pas des acomptes, mais des factures partielles non prévues dans le contrat et sans contrôle contradictoire.
3.
La recourante se plaint enfin d'une violation de l'<ref-law>. La critique est exclusivement fondée sur la prémisse que les parties ont convenu une modification du contrat de sous-traitance sur la question de la rémunération, ce qui n'est précisément pas établi. Fondé sur un autre état de fait que celui retenu par le juge d'appel, le grief est irrecevable (<ref-law>; <ref-ruling> consid. 2.1).
4.
La recourante, qui succombe, supporte les frais et dépens de la présente procédure (art. 66 et 68 LTF).

Par ces motifs, le Tribunal fédéral prononce:
1.
Le recours est rejeté dans la mesure où il est recevable.
2.
Les frais judiciaires, arrêtés à 2'000 fr., sont mis à la charge de la recourante.
3.
La recourante versera à l'intimée une indemnité de 2'500 fr. à titre de dépens.
4.
Le présent arrêt est communiqué aux mandataires des parties et à la Chambre civile de la Cour de justice du canton de Genève.
Lausanne, le 10 juillet 2013
Au nom de la Ire Cour de droit civil
du Tribunal fédéral suisse
La Présidente: Klett
La Greffière: Monti