Citation: 4A_231/2016 E. A

A.a. La société à responsabilité limitée Z.________ Sàrl (ci-après: la demanderesse) est active dans le domaine des travaux du bâtiment; A.________ en est l'un des associés gérants. La société anonyme X.________ SA (ci-après: la défenderesse) exploite des restaurants à Genève; elle a notamment pour administrateur B.________. Le 15 octobre 2012, la demanderesse a adressé à la défenderesse un "descriptif final" de travaux relatifs à la création d'un restaurant à Genève, devisés à 102'359 fr. hors taxe (HT), respectivement à 110'547 fr. 72 après adjonction de la taxe sur la valeur ajoutée (TVA) s'élevant à 8'188 fr. 72. Ce devis mentionnait divers travaux, notamment de maçonnerie, plâtrerie et peinture, de climatisation et d'électricité, ainsi que la fourniture et la pose de carrelage ou encore l'évacuation de bennes. Chaque poste des travaux était précisément chiffré. La défenderesse a accepté ce devis. Les parties ont convenu que le paiement des travaux se ferait par acomptes et que le solde dû serait versé à l'achèvement des travaux et à la réception de l'ouvrage. A.b. Par courrier du 15 octobre 2012, la demanderesse a sollicité le versement d'un premier acompte de 80'000 fr. toutes taxes comprises (TTC), soit 74'074 fr. HT pour ses prestations et 5'925 fr. 92 de TVA. La défenderesse a versé l'acompte requis le 16 janvier 2013. Une facture ("invoice") datée du même jour a été établie; elle reprend le descriptif des travaux figurant dans le devis du 15 octobre 2012 et les mêmes montants, pour un total de 102'359 fr. hors TVA, laquelle n'est pas mentionnée. Sur ce document figure la mention manuscrite « reçus ce jour quatre vingt mille solde 22'359 CHF » et une signature illisible, vraisemblablement celle de l'associé gérant A.________. A.c. Les travaux ont débuté au mois d'octobre 2012 et ont été achevés au plus tard au début de l'année 2013. Le 20 mars 2013, la demanderesse a facturé à la défenderesse un solde de 30'547 fr. 80 TTC qu'elle justifiait de la façon suivante: 102'359 fr. HT sous déduction de l'acompte de 74'074 fr. HT = 28'285 fr. HT majoré d'une TVA de 2'262 fr. 80. Par courriers des 2 et 25 avril 2013, la demanderesse a imparti à la défenderesse un délai au 5 avril 2013, respectivement au 29 avril 2013, pour verser la somme de 30'547 fr. 80. Le 3 mai 2013, elle a fait notifier une poursuite portant sur ce même montant à la défenderesse, qui a fait opposition. A.d. Par lettre du 14 mai 2013, la défenderesse a informé la demanderesse de ce qu'elle avait mandaté un architecte pour faire constater les défauts affectant les travaux réalisés. Elle signalait d'ores et déjà un trou d'environ 25 centimètres sur la façade de l'immeuble, le non-fonctionnement de l'air conditionné ainsi que des dalles mal posées ou cassées. La demanderesse a contesté toute responsabilité en relation avec les défauts énumérés, respectivement a relevé la tardiveté de leur annonce. Le 22 juillet 2013, la défenderesse a répondu qu'elle avait déjà signalé les malfaçons, notamment le carrelage cassé, à l'associé gérant de la demanderesse à la fin de l'année 2012. A.e. Le 17 juin 2013, un bureau d'architectes mandaté par la défenderesse a établi un rapport sur les locaux du restaurant. Il en ressort en substance que le carrelage posé au sol présentait de nombreux points d'accroche très gênants au déplacement, signe que les carreaux avaient été posés sans aucun contrôle des niveaux. Par ailleurs, le carrelage sonnait creux à certains endroits, ce qui laissait supposer que le mortier-colle n'avait pas été réparti de façon uniforme sur le support. L'épaisseur de colle ne correspondait pas à celle d'un double encollage, procédé pourtant indispensable pour la mise en place de carreaux de grand format. Sur certaines marches, des carreaux étaient cassés et recollés; sur un carreau, des trous pour la fixation de la main courante étaient visibles. Les profils d'angle des marches étaient en mauvais état et le choix d'un profil en aluminium n'était pas la solution la plus adéquate. Les joints entre les carrelages étaient irréguliers, voire absents par endroits, ce qui risquait de provoquer la fissure ou la cassure des carreaux. Il manquait une plaque de fermeture d'environ 10 cm de largeur sur le faux-plafond, ce qui était susceptible de poser un problème avec le service d'hygiène. Une plaque était déformée et dans les angles en saillie, les profils de fixation n'avaient pas été découpés en biais. La climatisation installée n'avait pas été mise en service et les télécommandes n'avaient pas été livrées. Le rapport évaluait à 61'673 fr. 40 TTC les travaux de réfection, qui nécessiteraient la fermeture du restaurant pendant une période d'environ deux mois.