Faits :
A.
Le 2 décembre 2017, A._ et son ami C._ se sont rendus en voiture au restaurant B._, à..., exploité par la société anonyme éponyme (ci-après: la société ou l'hôtel).
A leur arrivée, aux alentours de 20 heures, C._, le conducteur, a confié le véhicule de marque Audi modèle Q7 au voiturier, D._, afin qu'il le prenne en charge et le gare. A._ et son ami ont ensuite été accompagnés au restaurant, où ils ont passé la soirée.
Vers minuit, les employés de l'hôtel - E._ et F._ - ont été chargés d'aller chercher la voiture et de l'avancer devant l'établissement.
Par SMS du 3 décembre 2017 à 2h07, C._ a écrit à G._, employé de l'hôtel, pour le remercier de «cette belle soirée», tout en précisant que la cuisine n'avait pas été à la hauteur de ses attentes, que le service «de haute volée» était toujours un régal, qu'il était heureux de l'avoir revu et qu'il se réjouissait de le recevoir très prochainement.
Le même jour à 18h46, C._ a derechef envoyé à G._ un SMS, dans lequel il indiquait que son carnet d'adresses lui était ouvert et qu'il se réjouissait de parler plus concrètement de leurs projets lors de sa venue à Genève.
Par courriel du 4 décembre 2017, A._ a informé l'hôtel qu'un dommage avait été constaté sur le volant de la voiture susdécrite, précisant qu'il s'agissait du véhicule de C._; elle lui demandait de prendre en charge le remplacement du volant.
En procédure, elle produira une photographie prise le 3 décembre 2017 à 14h48 montrant un éclat sur la partie laquée en émail blanc du volant.
Par courriel du 7 février 2018, A._ a requis de la société le paiement du remplacement du volant pour un montant de 3'665 fr.
L'interpellée a répondu ce qui suit par courriel du 19 février 2018:
" Comme nous l'avons expliqué à Madame A._, nous contestons avoir endommagé le volant de son véhicule. À aucun moment il n'y a eu un moindre choc. En effet, les collaborateurs qui l'ont déplacé l'ont fait avec le plus grand soin. Ils ne portaient aucune bague ni autre objet. L'ensemble de notre équipe était au courant de la venue de Madame A._ ainsi que de la personne qui l'accompagnait. Il s'agissait d'une table importante et nous avions à coeur de donner le meilleur de nous-mêmes. Vous trouverez ci-dessous le déroule ment des événements:
2 décembre 2017
L' A udi blanche arrive sur le parking à 19h56.
A 19h57, sortie de D._ et de G._ pour accueillir Madame A._.
G._ accompagne Madame A._ au restaurant gastronomique.
D._ monte dans la voiture à 19h58 e t commence la manoeuvre de parcage.
A 20h00, il sort de la voiture. Elle est stationnée devant une colonne.
A 23h58, F._ et E._ montent dans la voiture.
Ils manoe u vrent ensemble pour mettre la voiture devant l'hôtel jusqu'à 00h00, puis E._ fait un tour complet pour que la voiture soit bien alignée. Il est 00h02."
Selon un devis établi par H._ Sàrl le 18 juin 2018, les travaux de réparation du volant du véhicule s'élèvent à 7'273 fr.; ils comprennent le remplacement du volant, de l'airbag ainsi que la reprogrammation de l'airbag et des commandes du volant. Ce document indique que le véhicule en cause porte les plaques ZG xxx et, sous la rubrique «Nom», celui de l'entreprise I._ à....
B.
Par demande du 29 août 2018, A._ a conclu à ce que Société B._ SA lui verse 7'272 fr. avec intérêts à titre de réparation du dommage et 6'000 fr. à titre de dommages-intérêts liés aux frais de défense avant le dépôt de la procédure.
Lors de l'audience d'instruction et de jugement du 29 avril 2019, la demanderesse a informé d'entrée de cause le président que le témoin C._ ne se présenterait pas, produisant un certificat médical selon lequel l'intéressé se trouvait en incapacité de travail. Elle a sollicité une nouvelle convocation du témoin et le renvoi des plaidoiries finales à une date ultérieure. La défenderesse s'y est opposée. Statuant sur le siège, le président a rejeté la requête.
G._, D._, E._, F._ et J._, vendeur de pièces automobiles, ont été entendus comme témoins. La demanderesse et K._, directeur général de l'hôtel, pour la défenderesse ont ensuite été interrogés à forme de l'<ref-law>.
Après audition des témoins et interrogatoire des parties, la demanderesse a renouvelé sa requête d'audition du témoin C._ et de renvoi des plaidoiries finales, exposant qu'elle venait de recevoir un courriel de celui-ci selon lequel il avait demandé un autre certificat médical qui ne pourrait être adressé que le lendemain. La défenderesse s'y est derechef opposée. Statuant sur le siège, le président a rejeté cette nouvelle requête, puis a clos l'instruction.
Par jugement du 10 mai 2019, dont les considérants écrits ont été adressés aux parties pour notification le 6 août 2019, le Président du Tribunal civil de l'arrondissement de l'Est vaudois a rejeté la demande. Il a considéré que la demanderesse avait échoué à établir qu'elle était la propriétaire du véhicule prétendument endommagé, de sorte qu'elle ne disposait pas de la légitimation active; au surplus, elle n'avait pas non plus démontré que le dommage allégué avait été causé par le personnel de la défenderesse.
Statuant sur appel de la demanderesse, la Cour d'appel civile du canton de Vaud a confirmé ce jugement par arrêt du 19 novembre 2019. Ses motifs seront évoqués dans les considérants en droit, dans la mesure utile à la discussion des griefs.
C.
A._ interjette un recours constitutionnel subsidiaire, concluant à l'annulation de l'arrêt cantonal et au renvoi de la cause à l'autorité précédente.
Société B._ SA propose le rejet du recours.
La cour cantonale se réfère aux considérants de son arrêt.

Considérant en droit :
1.
1.1. D'après les conclusions prises devant l'autorité précédente (<ref-law>), la valeur litigieuse de cette affaire pécuniaire est inférieure à 30'000 fr. Partant, seul le recours constitutionnel subsidiaire est ouvert, à l'exclusion du recours en matière civile (cf. art. 74 al. 1 let. b et art. 113 LTF).
1.2. Le recours a été déposé en temps utile (art. 117 et 100 LTF; art. 46 al. 1 let. c et <ref-law>) contre une décision finale (art. 117 et 90 LTF) prise en dernière instance cantonale et sur recours par un tribunal supérieur (art. 114 et 75 LTF), par une partie qui a pris part à la procédure devant l'autorité précédente et a un intérêt juridique à la modification de la décision (<ref-law>).
2.
2.1. L'<ref-law> admet comme seul motif de recours la violation des droits constitutionnels. Le Tribunal fédéral n'examine que les griefs expressément soulevés et motivés conformément au principe d'allégation (art. 106 al. 2 et art. 117 LTF). Le recourant doit indiquer quel droit ou principe constitutionnel a été violé par l'autorité précédente et dans quelle mesure, en présentant une argumentation claire et circonstanciée; des critiques simplement appellatoires ne sont pas admissibles (<ref-ruling> consid. 1.2.2 p. 286; <ref-ruling> consid. 2.4 p. 368; <ref-ruling> consid. 2.2 p. 232; <ref-ruling> consid. 2.2 p. 246).
2.2. Le Tribunal fédéral statue sur la base des faits établis par l'autorité précédente (<ref-law>). Il peut rectifier ou compléter les constatations de l'autorité précédente si les faits ont été établis en violation du droit au sens de l'<ref-law> (<ref-law>). La critique de l'état de fait retenu est soumise au principe strict de l'allégation énoncé par l'<ref-law> (<ref-ruling> consid. 2.3 p. 266 et les arrêts cités).
3.
La recourante dénonce une violation de l'art. 29 al. 2 Cst. ainsi que de l'art. 6 CEDH, dans sa composante relative au droit d'accès au dossier et au droit de se prononcer sur une nouvelle pièce. Après un long développement sur le droit d'être entendu, elle se plaint de n'avoir jamais reçu de tirage du procès-verbal de l'audience de débats du 29 avril 2019, qui aurait dû lui être délivré à l'issue de ceux-ci. Une demande téléphonique de sa part serait demeurée lettre morte. A réception du dispositif du jugement, elle aurait réitéré cette requête, sans plus de succès. Devant l'impossibilité de se prononcer sur les différents témoignages des employés de l'intimée, elle aurait dénoncé cette situation dans son appel, sans convaincre la cour cantonale, laquelle lui aurait reproché de ne pas avoir renouvelé son unique requête ni consulté le dossier.
3.1. Tel qu'il est garanti par l'art. 29 al. 2 Cst., le droit d'être entendu comprend notamment pour le justiciable le droit de s'exprimer sur les éléments pertinents avant qu'une décision touchant sa situation juridique ne soit prise, d'obtenir l'administration des preuves pertinentes et valablement offertes, de participer à l'administration des preuves essentielles et de se déterminer sur son résultat lorsque cela est de nature à influer sur la décision à rendre (<ref-ruling> consid. 4.1 p. 72; <ref-ruling> consid. 2.3 p. 222; <ref-ruling> consid. 4.1.1 p. 52 s.; <ref-ruling>consid. 2.3 p. 282; <ref-ruling> consid. 3.1 p. 277). Toute prise de position ou pièce nouvelle versée au dossier doit être communiquée aux parties pour leur permettre de décider si elles veulent ou non faire usage de leur faculté de se déterminer (parmi plusieurs: ATF <ref-ruling>consid. 4.1.1 p. 53 s.; <ref-ruling>consid. 2.1 p. 485 s.).
3.2. La cour cantonale a constaté, en fait, que la recourante n'avait pas formulé plusieurs demandes restées sans réponse en vue d'obtenir copie du procès-verbal, comme elle l'affirmait, mais une seule, à l'occasion de sa demande de motivation du dispositif. Il était exclu qu'elle se soit trouvée «dans l'impossibilité de se prononcer sur les divers témoignages» puisqu'il lui aurait été loisible de requérir une consultation du dossier de première instance, respectivement de renouveler sa demande d'envoi d'une copie du procès-verbal en question.
3.3. La recourante se trompe lorsqu'elle voit dans le procès-verbal en cause une pièce nouvelle sur laquelle elle devait être invitée à s'exprimer: elle a assisté à l'audition des témoins et a pu les interroger, au même titre que la partie adverse. Leurs déclarations n'ont rien de nouveau pour elle. Il est d'ailleurs piquant de relever qu'elle y faisait à plusieurs reprises référence dans son appel (complément d'office sur la base du dossier).
En tout état de cause, aucun des témoins entendus ne pouvait suppléer à la preuve de la propriété de la voiture prétendument endommagée, qu'il appartenait à la recourante d'apporter puisque l'allégué correspondant était contesté. Or, cette carence scelle à elle seule le sort des prétentions de la recourante.
4.
La recourante se plaint derechef d'une violation de l'art. 29 al. 2 Cst. dans une autre de ses composantes, celle relative au droit à la preuve. Elle fait valoir qu'elle a sollicité l'audition de C._, lequel «souffrant, n'a pas pu se présenter». En refusant de le convoquer à une nouvelle audition, le premier juge aurait violé son droit d'être entendue et la cour cantonale aurait avalisé cette violation. Elle reproche également aux juges précédents d'avoir entériné une appréciation anticipée des preuves arbitraire opérée par le premier juge (art. 9 Cst.).
4.1. Le droit d'être entendu garanti par l'art. 29 al. 2 Cst. comprend notamment le droit pour le justiciable de produire des preuves pertinentes quant aux faits de nature à influer sur la décision à rendre, d'obtenir qu'il soit donné suite à ses offres de preuves pertinentes, de participer à l'administration des preuves essentielles ou à tout le moins de s'exprimer sur son résultat, à moins que le fait à prouver ne soit dépourvu de pertinence ou que le moyen de preuve n'apparaisse manifestement inapte à établir le fait allégué, ainsi que de se déterminer à leur propos (ATF <ref-ruling> consid. 2.3 p. 222; <ref-ruling> consid. 4.1.1 p. 52 s.; <ref-ruling> consid. 3.3 p. 64; <ref-ruling> consid. 3.3 p. 496).
Le droit à la preuve ne régit pas l'appréciation des preuves (<ref-ruling> consid. 4.3 p. 226), ni n'exclut l'appréciation anticipée des preuves (<ref-ruling> consid. 4.3.1 p. 376 et les arrêts cités), à laquelle l'auteur du recours ne peut s'en prendre qu'en soulevant le grief d'arbitraire (art. 9 Cst.).
En matière d'appréciation des preuves, le Tribunal fédéral se montre réservé, vu le large pouvoir qu'il reconnaît en ce domaine aux autorités cantonales. Il n'intervient, du chef de l'art. 9 Cst., que si le juge du fait n'a manifestement pas compris le sens et la portée d'un moyen de preuve, a omis sans raisons objectives de tenir compte des preuves pertinentes ou a effectué, sur la base des éléments recueillis, des déductions insoutenables. L'arbitraire ne résulte pas du seul fait qu'une autre solution serait concevable, voire préférable (<ref-ruling> consid. 2.3 p. 266; <ref-ruling> consid. 4.2 p. 234; <ref-ruling> consid. 4.2 p. 560; <ref-ruling> consid. 4.3; <ref-ruling> consid. 1.4.3).
4.2. La cour cantonale a considéré que le premier juge n'avait pas violé le droit d'être entendu de la recourante. Elle a fait siennes ses considérations selon lesquelles le certificat médical produit par le témoin faisait uniquement état d'une incapacité de travail, et non d'une incapacité de se présenter à une audience; il n'y avait dès lors pas de motif justifié pour procéder à une nouvelle convocation et à un renvoi des plaidoiries finales. Le premier juge avait réitéré ce refus après que la recourante avait fourni, lors de la même audience, un courriel indiquant qu'un certificat médical complémentaire serait envoyé le lendemain; en effet, le certificat produit, daté du 28 avril 2019, n'établissait pas une incapacité de se présenter devant le tribunal et faisait état d'une incapacité de travail dès le 26 avril 2019, date à laquelle le témoin aurait pu immédiatement consulter un médecin ou contacter le tribunal. Par ailleurs, le témoignage de C._, qui était l'ami de la recourante, n'aurait pas pu constituer une preuve suffisante, vu ses liens avec cette partie et l'intérêt qu'il pouvait avoir dans la cause, ayant pu être lui-même à l'origine du dommage au volant du véhicule concerné, qu'il avait conduit pour se rendre au restaurant. Ce témoignage pouvait dès lors être refusé par appréciation anticipée des preuves, d'autant que le refus du premier juge était intervenu à un moment où l'ensemble des autres preuves avaient été administrées.
4.3. C'est à bon droit que la cour cantonale a jugé que le premier juge pouvait renoncer à l'audition requise par appréciation anticipée des preuves. En effet, on ne conçoit guère que le témoin en cause puisse établir la propriété de la recourante sur le véhicule litigieux; tout au plus pouvait-il déclarer qu'il n'était pas le sien. Quant aux éclairages qu'il aurait pu apporter s'agissant du dommage au volant du véhicule, la question demeure de savoir si le témoin était tout à fait étranger à sa survenance, de sorte que son témoignage, à supposer qu'il eût été en défaveur de l'intimée, aurait été sujet à caution. On ne décèle nul arbitraire dans cette appréciation, ce qui clôt la discussion.
5.
Partant, le recours ne peut qu'être rejeté. La recourante supportera les frais de la procédure (<ref-law>) et versera à l'intimée une indemnité à titre de dépens (art. 68 al. 1 et 2 LTF).

Par ces motifs, le Tribunal fédéral prononce :
1.
Le recours est rejeté.
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 Cour d'appel civile du Tribunal cantonal du canton de Vaud.
Lausanne, le 28 août 2020
Au nom de la Ire Cour de droit civil
du Tribunal fédéral suisse
La Présidente : Kiss
La Greffière : Godat Zimmermann