Faits :
A.
Clinique B._ Sàrl (ci-après: la clinique) a pour but l'exploitation d'une clinique de médecine à Genève. C._ en est l'associée-gérante et la directrice.
En fonction de leur état de santé, les patients de la clinique sont hospitalisés (24h/24), placés en hôpital de jour (demi-journée ou journée complète) ou suivis de manière ambulatoire (consultation uniquement). En règle générale, les psychologues employés par la clinique sont rémunérés de manière fixe pour leur activité avec les patients hospitalisés et de manière variable pour les consultations ambulatoires, suivant le nombre de consultations effectuées avec les patients non hospitalisés.
A._, psychologue, était employée au Centre hospitalier universitaire de X._ (ci-après: CHU X._). Après des pourparlers initiés en septembre 2013 avec la clinique genevoise et le refus de plusieurs propositions émanant de celle-ci, A._ a été engagée, par contrat de travail signé le 14 octobre 2013, en qualité de psychologue à partir du 1 er décembre 2013. Le taux d'activité fait l'objet du chiffre 2 du contrat, qui a la teneur suivante:
" Pour commencer, l'employée est engagée au taux de 100%. Au prorata du nombre de patients ambulatoires développé (maximum fixé à cinq patients), le pourcentage de travail s'adaptera pour arriver à 80%. L'employée travaille du lundi au jeudi, avec une possibilité d'extension au vendredi au départ. "
Le chiffre 6 du contrat fixe le salaire brut mensuel à 7'000 fr. Selon le chiffre 7 du contrat, la clinique versera à l'employée mensuellement 70% des sommes perçues des caisses-maladie concernant les entretiens ambulatoires, sous déduction des charges sociales usuelles. Après une période d'essai de deux mois (chiffre 3), le contrat de travail était "conclu pour une période d'une année, renouvelable par tacite reconduction (ce contrat est donc à durée indéterminée) " (chiffre 5).
Fin 2013, A._ avait obtenu du CHU X._ un congé (sans solde) pour convenance personnelle, dans un premier temps jusqu'à mi-septembre 2014, ce qui lui permettait de bénéficier d'une priorité de réemploi, sans garantie; ce statut était renouvelable pour six ans au maximum, à condition qu'elle informe régulièrement le CHU de ses intentions, un retour éventuel devant être annoncé au moins deux mois à l'avance.
Dans son nouvel emploi, A._ a travaillé en décembre 2013 à 100% en clinique (hôpital et hôpital de jour); elle a perçu un salaire brut de 7'000 fr. Dès janvier 2014, elle a commencé à recevoir des patients en ambulatoire. Pour ce mois-ci, la clinique a payé à l'employée 6'303 fr.50 à titre de salaire de base brut, soit 90% de 7'000 fr., correspondant à 163.75 heures en clinique y compris les heures supplémentaires; pour les 17.5 heures de consultations ambulatoires, A._ a perçu 1'989 fr.45 bruts. Pour février 2014, la clinique a versé à l'employée un salaire de base brut de 5'978 fr.45 (soit environ 85% de 7'000 fr.) et 2'667 fr. bruts pour les consultations ambulatoires.
Un différend a rapidement surgi entre les parties au sujet de l'interprétation des clauses du contrat relatives au salaire. A._ estimait que les rétrocessions des sommes versées par les caisses-maladie s'ajoutaient au salaire de base à 100%. Le 27 février 2014, elle a refusé de signer l'avenant proposé par la clinique, qui prévoyait un temps de travail fixe à 60% pour un salaire mensuel brut de 4'200 fr., ainsi que le versement du 70% des sommes perçues des caisses-maladie pour les entretiens ambulatoires.
Dès le 1 er mars 2014, le taux d'activité de A._ a passé à 80%, d'entente entre les parties et conformément à ce que le contrat du 14 octobre 2013 prévoyait. Depuis lors, la clinique a versé à l'employée un montant brut de 4'200 fr. à titre de part fixe du salaire, soit 60% de 7'000 fr., et lui a rétrocédé le 70% des prestations payées par les caisses-maladie pour les entretiens ambulatoires.
Par pli du 29 avril 2014, A._ a exprimé à son employeuse son désaccord sur la manière de calculer sa rémunération. Selon elle, le contrat prévoyait notamment, dès le 1 er mars 2014, le versement du salaire fixe à 80%, soit 5'600 fr., plus les rétrocessions des consultations ambulatoires. Elle réclamait la différence entre le salaire qu'elle considérait lui être dû et le salaire versé.
Le 13 mai 2014, C._ et A._ ont eu un entretien au cours duquel elles ne sont pas parvenues à s'entendre sur l'interprétation du contrat de travail. La directrice considérait que la psychologue cherchait à se faire payer doublement pour une prestation, soit à obtenir la rémunération des heures de consultation ambulatoire par une part du salaire fixe et par la rétrocession des remboursements des caisses-maladie. A l'issue de l'entrevue, elle a signifié à A._ que le contrat de travail prendrait fin le 30 juin 2014, conformément à la convention collective de travail (CCT) applicable. L'employée a reçu le même jour une confirmation écrite de cette décision.
Le 10 juin 2014, l'employée s'est opposée à son licenciement notifié pour le 30 juin 2014, dont elle a demandé les motifs. Elle a rappelé que le contrat était d'une durée minimale d'un an et a offert ses services.
Par courrier du 12 juin 2014, la clinique a confirmé la fin des rapports de travail au 30 juin 2014. Elle a justifié le licenciement par une perte de confiance mutuelle et libéré l'employée de son obligation de travailler jusqu'au 30 juin 2014.
Par pli recommandé du 26 juin 2014, A._, agissant par son conseil, a rappelé une nouvelle fois à la clinique que le contrat pouvait être résilié au plus tôt pour le 31 janvier 2015. Elle a offert ses services pour le 1 er juillet 2014 et mis l'employeuse en demeure de lui verser la somme de 7'318 fr.05 à titre de différence entre le salaire convenu et le salaire versé pour la période de janvier à juin 2014.
Par fax du 30 juin 2014, la clinique a informé A._ qu'elle ne souhaitait pas qu'elle se présente à son poste le 1 er juillet 2014.
Le 11 juillet 2014, A._ a adressé au CHU X._ une demande en vue d'être réemployée à l'issue du congé pour convenance personnelle arrivant à échéance le 15 septembre 2014.
Par télécopie envoyée le 29 juillet 2014 à 18h19 au conseil de l'employée, la clinique, agissant par son avocat, a reconnu que le contrat de travail ne prenait pas fin avant le 31 janvier 2015 et a demandé à l'employée de se présenter à son poste le lendemain à 14h00.
Le 5 août 2014, A._ s'est étonnée auprès de l'employeuse du délai de 20 heures qui lui avait été laissé pour réintégrer son poste; elle a informé la clinique qu'elle se trouvait alors en vacances à l'étranger et qu'elle serait en formation pendant une semaine dès le 5 août, de sorte qu'elle n'était pas en mesure de se présenter à son travail. Par ailleurs, elle a demandé les raisons de la révocation de la libération de travailler; elle a également mis l'employeuse en demeure de lui verser les salaires dus, invoquant l'<ref-law> pour refuser d'exécuter sa prestation de travail.
Par pli du 9 août 2014, la clinique a fait savoir à A._ qu'étant donné la fin du contrat de travail au 31 janvier 2015, l'employée ne pouvait pas exiger de recevoir un salaire pendant plus de six mois sans travailler. L'employeuse a contesté avoir libéré l'employée de son obligation de travailler au-delà du 30 juin 2014 et, au besoin, a déclaré invalider pour cause d'erreur toute éventuelle libération d'une telle obligation; l'employée était ainsi priée de se rendre à son travail le 18 août 2014. Par ailleurs, la clinique a contesté l'exception tirée de l'<ref-law> et invalidé pour erreur essentielle les chiffres 2, 6 et 7 du contrat de travail.
Par courriers des 18 et 20 août 2014, A._ a informé la clinique qu'elle ne se présenterait pas à son poste aussi longtemps que les montants qui lui étaient dus ne seraient pas payés. Elle a contesté l'erreur dont l'employeuse se prévalait à propos de la libération de l'obligation de travailler, dès lors que C._ était juge prud'hommes et que son erreur dans le calcul du délai de congé avait été relevée à plusieurs reprises. L'employée considérait au surplus avoir subi un congé-représailles.
Par lettre du 15 septembre 2014, la clinique a qualifié d'abusif le comportement de A._. Elle a fait valoir qu'une prolongation importante du délai de congé, comme en l'espèce, permettait à l'employeur de renoncer à la libération de l'obligation de travailler.
Le 16 septembre 2014, A._ a repris son poste de travail en France, le CHU X._ ayant décidé sa réintégration le 2 septembre 2014.
Le 19 septembre 2014, la clinique a avisé A._ que sa rémunération de juillet à septembre 2014 lui serait payée sur la base d'un salaire brut fixe à 60%, soit 4'200 fr. par mois, plus 2'919 fr.40 correspondant à une moyenne des prestations ambulatoires sur 5,5 mois. En outre, elle sommait l'employée de se rendre à son travail à partir du 1 er octobre 2014.
Par courrier du 30 septembre 2014, A._ a informé la clinique de la reprise de son emploi auprès du CHU X._. Elle a persisté à invoquer l'<ref-law> au motif que la totalité de sa rémunération, selon son interprétation du contrat, ne lui avait pas encore été versée.
Le 2 octobre 2014, la clinique a indiqué à A._ que son absence constituait un abandon de poste et qu'aucun salaire ne lui serait plus versé.
B.
A la suite de l'échec de la conciliation, A._ a, par demande du 28 juillet 2015, assigné Clinique B._ Sàrl en paiement de la somme brute de 49'955 fr.78 plus intérêts - composée de différentes prétentions salariales dès janvier 2014, en particulier du salaire fixe et variable de juillet 2014 à janvier 2015, sous déduction du salaire perçu à l'époque au CHU X._ - et d'un montant net de 29'282 fr.10 plus intérêts à titre d'indemnité pour licenciement abusif.
Par jugement du 15 mars 2017, le Tribunal des prud'hommes du canton de Genève a condamné Clinique B._ Sàrl à verser à A._, sous déduction de 7'797.32 euros perçus du CHU X._ entre septembre 2014 et janvier 2015, la somme brute de 49'347 fr.15, avec intérêts à 5% l'an dès le 1 er février 2015, comprenant les prétentions suivantes:
- 1'718 fr.05 à titre de différence de salaire fixe en janvier et février
2014;
- 5'600 fr. à titre de différence de salaire fixe de mars à juin 2014;
- 1'460 fr.15 à titre de salaire variable du 12 au 30 juin 2014;
- 1'171 fr.30 en indemnisation d'heures supplémentaires;
- 39'397 fr. à titre de salaire fixe et variable de juillet 2014 à janvier
2015.
En outre, le tribunal a condamné la clinique à verser à l'employée la somme nette de 8'969 fr.55 à titre d'indemnité pour licenciement abusif, avec intérêts à 5% dès le 1 er février 2015.
Statuant le 29 mai 2018 sur appel de l'employeuse, la Chambre des prud'hommes de la Cour de justice du canton de Genève a annulé le jugement entrepris, puis a condamné Clinique B._ Sàrl à verser à A._ la somme brute de 13'358 fr. - 13'905 fr. après rectification du 11 juillet 2018 sur la base de l'<ref-law> - avec intérêts à 5% dès le 1 er octobre 2014, sous déduction de 899.64 euros, les parties étant déboutées de toutes autres conclusions. La cour cantonale a confirmé les montants bruts alloués en première instance à titre de différence de salaire fixe de janvier à juin 2014 et à titre de salaire variable en juin 2014; elle a réduit à 1'007 fr.30 l'indemnisation des heures supplémentaires. Contrairement au tribunal, la Chambre des prud'hommes a jugé en revanche que l'employée ne disposait d'aucune prétention salariale pour la période d'octobre 2014 à janvier 2015; la clinique a ainsi été condamnée à verser à l'employée le solde de salaire fixe et variable de juillet à septembre 2014, soit 4'119 fr.45, sous déduction de la rémunération perçue auprès du CHU X._ en septembre, soit 899.64 euros. Par ailleurs, la cour cantonale a nié qu'une indemnité pour licenciement abusif soit due à l'employée.
C.
A._ interjette un recours en matière civile. Elle demande au Tribunal fédéral d'annuler l'arrêt cantonal, puis, principalement, de confirmer le jugement du Tribunal des prud'hommes et de condamner Clinique B._ Sàrl à lui verser, d'une part, la somme brute de 49'347 fr.15 avec intérêts à 5% dès le 1 er février 2015, sous déduction de 7'797.32 euros et, d'autre part, la somme nette de 8'969 fr.55 avec intérêts à 5% dès le 1 er février 2015.
Clinique B._ Sàrl propose le rejet du recours dans la mesure de sa recevabilité. Sa réponse a été suivie d'une réplique de la recourante. L'intimée a encore déposé une duplique.
Pour sa part, la cour cantonale se réfère aux considérants de son arrêt.

Considérant en droit :
1.
Le recours est dirigé contre un arrêt final (<ref-law>) rendu en matière civile (<ref-law>) par le tribunal supérieur institué comme autorité cantonale de dernière instance, lequel a statué sur recours (<ref-law>). La cause atteint la valeur litigieuse de 15'000 fr. ouvrant le recours en matière civile dans les affaires relevant du droit du travail (<ref-law>). La recourante, dont les conclusions condamnatoires ont été rejetées en grande partie, a la qualité pour recourir (<ref-law>). Déposé dans le délai (<ref-law>) et la forme (<ref-law>) prévus par la loi, le recours est en principe recevable, sous réserve de l'examen des griefs particuliers.
2.
2.1. Le recours en matière civile peut être exercé pour violation du droit fédéral (<ref-law>), y compris le droit constitutionnel (<ref-ruling> consid. 2.1 p. 247; <ref-ruling> consid. 2.4 p. 313). Le Tribunal fédéral applique le droit d'office (<ref-law>). Il n'est donc limité ni par les arguments soulevés dans le recours, ni par la motivation retenue par l'autorité précédente; il peut admettre un recours pour un autre motif que ceux qui ont été invoqués et il peut rejeter un recours en adoptant une argumentation différente de celle de l'autorité précédente (<ref-ruling> consid. 2 p. 89; <ref-ruling> consid. 1.3 p. 336; <ref-ruling> consid. 1.4; <ref-ruling> consid. 1.4 p. 400). Compte tenu de l'exigence de motivation contenue à l'art. 42 al. 1 et 2 LTF, sous peine d'irrecevabilité (<ref-law>), le Tribunal fédéral n'examine en principe que les griefs invoqués, sauf en cas d'erreurs juridiques manifestes. Il n'est pas tenu de traiter, comme le ferait une autorité de première instance, toutes les questions juridiques qui se posent, lorsque celles-ci ne sont plus discutées devant lui (<ref-ruling> consid. 2, 115 consid. 2; <ref-ruling> consid. 1.3). Par exception à la règle selon laquelle il applique le droit d'office, il n'examine la violation d'un droit constitutionnel que si le grief a été invoqué et motivé de façon détaillée (<ref-law>; <ref-ruling> consid. 2.3; <ref-ruling> consid. 1.3; <ref-ruling> consid. 1.4 in fine).
2.2. Le Tribunal fédéral statue sur la base des faits établis par l'autorité précédente (<ref-law>). Il ne peut rectifier ou compléter les constatations de l'autorité précédente que si elles sont manifestement inexactes ou découlent d'une violation du droit au sens de l'<ref-law> (<ref-law>). "Manifestement inexactes" signifie ici "arbitraires" (<ref-ruling> consid. 1.3.1 p. 253; <ref-ruling> consid. 2 p. 117; <ref-ruling> consid. 1.5). Encore faut-il que la correction du vice soit susceptible d'influer sur le sort de la cause (<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 références). La partie qui entend attaquer les faits constatés par l'autorité précédente doit expliquer clairement et de manière circonstanciée en quoi les conditions précitées seraient réalisées (<ref-ruling> consid. 1.3.1 p. 18 et les références). Si elle souhaite obtenir un complètement de l'état de fait, elle doit aussi démontrer, par des renvois précis aux pièces du dossier, qu'elle a présenté aux autorités précédentes en conformité avec les règles de procédure les faits juridiquement pertinents à cet égard et les moyens de preuve adéquats (<ref-ruling> consid. 2 p. 90). Si la critique ne satisfait pas à ces exigences, les allégations relatives à un état de fait qui s'écarterait de celui de la décision attaquée ne pourront pas être prises en considération (<ref-ruling> consid. 1.3.1 p. 18). Aucun fait nouveau ni preuve nouvelle ne peut être présenté à moins de résulter de la décision de l'autorité précédente (<ref-law>).
3.
Devant la cour cantonale, la recourante a obtenu des montants bruts à titre de différence de salaire de janvier à juin 2014, à titre de salaire variable en juin 2014, à titre d'indemnisation des heures supplémentaires ainsi qu'à titre de salaire fixe et variable de juillet à septembre 2014, soit un total de 13'905 fr. C'est le lieu de préciser que, sur la manière de calculer le salaire, les instances précédentes ont confirmé l'interprétation des clauses contractuelles défendue par l'employée, à savoir un salaire fixe représentant 80% du salaire fixe à plein temps, auquel s'ajoute le 70% du montant remboursé par les caisses-maladie pour les consultations ambulatoires (salaire variable).
A ce stade, le litige porte sur la question de savoir, d'une part, si la recourante dispose envers l'employeuse de prétentions pour la période allant du 1er octobre 2014 au 31 janvier 2015 et, d'autre part, si elle peut faire valoir une indemnisation liée au licenciement lui-même.
3.1. Sur le premier point, la Chambre des prud'hommes a nié toute prétention salariale au-delà du 30 septembre 2014. Selon l'arrêt attaqué, l'employée pouvait en effet refuser sa prestation en invoquant l'exception de l'<ref-law> tant qu'aucun salaire ne lui était versé et qu'elle était en mesure de fournir sa prestation; en revanche, elle ne pouvait pas faire fi de la sommation de reprendre le travail le 1er octobre 2014 - formulée le 19 septembre 2014 et concomitante au versement (partiel) des salaires pour juillet à septembre 2014 - car, à ce moment-là, elle avait repris son poste à X._ et manifestait ainsi qu'elle n'était plus en mesure ni prête à exécuter son obligation de travailler jusqu'au terme du contrat le 31 janvier 2015, ce qui excluait la demeure de l'employeuse au sens de l'<ref-law>.
Sur le second point, la cour cantonale considère le contrat de durée minimale liant les parties comme un contrat de durée déterminée jusqu'au 31 janvier 2015. Selon l'arrêt attaqué, le licenciement signifié pour le 30 juin 2014 n'est ainsi pas valable et les dispositions instaurant une protection contre les congés ne peuvent lui être appliquées. Au demeurant, l'employeuse serait revenue sur sa décision de mettre fin au contrat en requérant que l'employée revienne travailler. Pour la Chambre des prud'hommes, une indemnité pour licenciement abusif n'entre donc pas en considération.
3.2. Selon la recourante, elle a droit à son salaire pour la période du 1er octobre 2014 au 31 janvier 2015, sans avoir à offrir ou fournir sa prestation de travail, dès lors que l'employeuse l'avait en juin 2014 irrévocablement libérée de son obligation de travailler jusqu'à l'échéance du contrat, les conditions permettant de revenir sur cette déclaration n'étant pas réalisées en l'espèce.
Se plaignant tout d'abord d'une violation du droit d'être entendu, la recourante reproche aux juges précédents de n'avoir pas examiné ce moyen - qualifié de principal - qui avait pourtant conduit le tribunal de première instance à admettre sa prétention. La recourante fait également grief à la cour cantonale d'avoir établi les faits de manière arbitraire en retenant une simple erreur de la part de l'employeuse à propos de la date pour laquelle le contrat pouvait être résilié et, partant, de la durée de la libération de l'obligation de travailler, alors que plusieurs éléments du dossier démontreraient que l'intimée était de mauvaise foi en persistant à prétendre jusqu'à fin juin 2014 que les rapports de travail se terminaient à ce moment-là. Invoquant une violation des <ref-law>, l'employée motive ensuite le moyen tiré de la libération irrévocable de l'obligation de travailler et sa conséquence, soit l'obligation de l'employeuse de verser le salaire jusqu'au 31 janvier 2015.
A titre subsidiaire, la recourante se plaint d'une violation de l'<ref-law>. Le paiement partiel à fin septembre 2014 des salaires de juillet et août 2014 n'aurait pas mis fin à la demeure de l'employeuse, laquelle excluait la demeure subséquente de l'employée; l'intimée ne serait ainsi pas fondée à refuser de payer les salaires d'octobre 2014 à janvier 2015 en se fondant sur l' exceptio non adimpleti contractus.
Par ailleurs, la recourante soutient que les parties étaient liées par un contrat de travail de durée indéterminée, avec impossibilité de le résilier pour un terme antérieur au 31 janvier 2015; comme un congé était nécessaire pour mettre fin aux rapports de travail, le licenciement du 13 mai 2014, donné à tort pour le terme du 30 juin 2014, serait valable en soi, ses effets étant simplement reportés au 31 janvier 2015. Pour la recourante, il est indiscutable que ce congé a été donné par l'intimée parce que l'employée réclamait le salaire dont il a été finalement reconnu par les deux instances précédentes qu'il correspondait bien à la rémunération prévue par le contrat; il s'agirait dès lors d'un congé-représailles au sens de l'art. 336a al. 1 let. d CO, qui devrait donner lieu au paiement d'une indemnité équivalant à un mois de salaire, soit 8'969 fr.55, comme les premiers juges l'avaient admis.
4.
Dans l'examen des prétentions de l'employée au-delà du 30 juin 2014, tant la cour cantonale que la recourante partent de la prémisse selon laquelle un contrat liait alors les parties, les rapports de travail ayant pris fin le 31 janvier 2015: la Chambre des prud'hommes se place sous l'angle de la demeure de l'employeuse, de la demeure de l'employée et de l'exception d'inexécution de l'<ref-law>, alors que la recourante invoque le caractère irrévocable de la libération de l'obligation de travailler.
En vertu du principe jura novit curia rappelé plus haut (consid. 2.1), la cour de céans s'attellera tout d'abord à revoir la base des raisonnements suivis jusqu'ici dans cette affaire.
4.1. Les parties étaient liées par un contrat de durée minimale: après la période d'essai de deux mois débutant le 1er décembre 2013, le contrat de travail était conclu pour une année, soit jusqu'au 31 janvier 2015, et reconduit ensuite tacitement.
Pendant la durée minimale convenue, un tel contrat déploie les effets propres au contrat de durée déterminée, en ce sens qu'il ne peut être mis fin aux rapports de travail par un congé ordinaire pour un terme antérieur à celui de l'échéance de la durée minimale fixée conventionnellement (cf. <ref-ruling>; arrêt 4C.397/2004 du 15 mars 2005 consid. 2.1 et 2.2). Pour l'employeur, la seule possibilité de mettre unilatéralement un terme au contrat de travail durant cette période est la résiliation immédiate pour justes motifs au sens de l'<ref-law> (arrêt précité 4C.397/2004 consid. 2.1; WYLER/HEINZER, Droit du travail, 3e éd. 2014, p. 497; ADRIAN STAEHELIN, Zürcher Kommentar, 4e éd. 2014, n° 17 ad <ref-law>). Justifiée ou non, une telle résiliation extraordinaire met fin au contrat en fait et en droit le jour même où elle est communiquée (<ref-ruling> consid. 3b p. 271; <ref-ruling> consid. 4a/bb p. 282; arrêt 4A_35/2017 du 31 mai 2017 consid. 4.1).
Qu'elle soit ordinaire ou immédiate, la résiliation consiste en l'exercice d'un droit formateur et, à ce titre, elle revêt en principe un caractère irrévocable (<ref-ruling> consid. 2a p. 135 et les références; cf. également <ref-ruling> consid. 3.3 p. 444; <ref-ruling> consid. 8.1.1 p. 364). Des exceptions sont possibles. Ainsi, la partie qui a résilié le contrat peut revenir sur sa déclaration si le cocontractant est d'accord avec cette révocation ou s'il a contesté la validité de la résiliation et, ce faisant, manifesté sa volonté de maintenir le contrat (arrêt 4C.222/2005 du 27 octobre 2005 consid. 3.3; cf. <ref-ruling> consid. 2 p. 75 s.).
4.2. En l'espèce, l'employeuse a licencié l'employée le 13 mai 2014 pour le 30 juin 2014. Cette résiliation pendant la durée minimale du contrat doit être traitée comme un congé intervenant au cours d'un contrat à durée déterminée, c'est-à-dire une résiliation pour justes motifs au sens de l'<ref-law>. Certes, l'employeuse n'a pas résilié le contrat avec effet immédiat, mais pour la fin d'un mois en respectant un bref délai de préavis. Cette circonstance ne fait toutefois pas obstacle à la qualification de congé extraordinaire (cf. <ref-ruling> consid. 7.3 p. 323 s. et les références à la doctrine majoritaire).
Lorsqu'elle s'est opposée à son licenciement le 10 juin 2014, la recourante a rappelé à l'intimée la durée minimale du contrat - un an - et a offert ses services. Dans son courrier recommandé du 26 juin 2014, le conseil de la recourante a fait observer à l'intimée, une nouvelle fois, que le contrat ne pouvait pas être résilié avant l'échéance du 31 janvier 2015 et a répété l'offre de services de sa cliente pour le 1er juillet 2014. En agissant ainsi en juin 2014, l'employée a manifesté qu'elle souhaitait la poursuite des rapports de travail au-delà du 30 juin 2014 et a donné l'occasion à l'employeuse de revenir sur la résiliation du 13 mai 2014. A ce moment-là, l'intimée n'a toutefois pas révoqué son acte formateur, bien au contraire. Dans sa réponse du 12 juin 2014, la clinique a confirmé la fin des rapports de travail pour le 30 juin 2014 et libéré l'employée de son obligation de travailler jusqu'à cette date. Et le 30 juin 2014, l'employeuse a encore fait savoir à la recourante qu'elle ne souhaitait pas sa présence à la clinique le lendemain.
Il s'ensuit que les rapports de travail ont pris fin en fait et en droit le 30 juin 2014.
Le 29 juillet 2014, l'intimée a reconnu que le contrat de travail "ne prenait pas fin avant le 31 janvier 2015" et a demandé à l'employée de se présenter à son poste le lendemain. Une éventuelle révocation de la résiliation n'entrait alors plus en ligne de compte, puisque le contrat avait déjà pris fin. L'acte de l'employeuse de fin juillet 2014 et les tentatives ultérieures de celle-ci de faire revenir la recourante ne peuvent constituer que des offres de conclure un contrat de travail. Or, rien dans l'attitude de l'employée en août et septembre 2014 ne permet d'admettre que l'intéressée aurait accepté de conclure un nouveau contrat.
En conclusion, la prémisse selon laquelle le contrat de travail a pris fin le 31 janvier 2015 se révèle erronée. Les prétentions de la recourante au-delà du 30 juin 2014 doivent être examinées sous l'angle de l'<ref-law> applicable en cas de résiliation immédiate injustifiée, ce qui suppose d'examiner au préalable si l'employeuse disposait de justes motifs au sens de l'<ref-law>.
5.
5.1. Sont notamment considérés comme de justes motifs au sens de l'<ref-law> toutes les circonstances qui, selon les règles de la bonne foi, ne permettent pas d'exiger de celui qui a donné le congé la continuation des rapports de travail. Seul un manquement particulièrement grave peut justifier une telle mesure (<ref-ruling> consid. 4.2). Par manquement, on entend généralement la violation d'une obligation découlant du contrat de travail, mais d'autres incidents peuvent aussi justifier une telle mesure (<ref-ruling> consid. 2.1.1; <ref-ruling> consid. 4.1; <ref-ruling> consid. 2.2).
En l'espèce, l'employeuse a motivé le licenciement par une perte de confiance mutuelle, sans faire état de manquements particuliers de la part de la recourante ou d'autres circonstances justifiant un congé extraordinaire. Il est manifeste que l'intimée ne disposait pas de justes motifs pour mettre un terme prématuré au contrat de travail.
5.2. Les conséquences pécuniaires d'une résiliation immédiate injustifiée sont prévues à l'<ref-law>.
5.2.1. Le travailleur a droit tout d'abord à des dommages-intérêts, correspondant à ce qu'il aurait gagné si les rapports de travail avaient pris fin à l'échéance du délai de congé ou à la fin du contrat de durée déterminée (<ref-law>; <ref-ruling> consid. 3.1 p. 407; <ref-ruling> consid. 3b p. 9 et les arrêts cités). Le revenu que l'employé a obtenu d'un autre travail est imputé sur le montant des dommages-intérêts (<ref-law>).
En l'espèce, la prétention de l'employée sur la base de l'<ref-law> représente le salaire du 1er juillet 2014 au 31 janvier 2015, sous déduction du revenu réalisé dès le 16 septembre 2014 auprès du CHU X._. Comme la cour cantonale a accordé à l'employée le salaire seulement jusqu'au 30 septembre 2014, le recours doit être admis sur ce point et l'arrêt attaqué sera réformé.
La recourante se réfère à cet égard aux montants bruts alloués dans le jugement de première instance à titre de salaire fixe et variable pour la période de juillet 2014 à janvier 2015, soit au total 39'397 fr., desquels doit être déduit le revenu réalisé de septembre 2014 à janvier 2015 auprès du CHU X._, par 7'797.32 euros. Ces montants ne sont pas contestés en tant que tels. Devant la cour cantonale, la recourante a obtenu un montant brut total de 13'905 fr.; sur cette somme, 4'119 fr.45 correspondent au salaire de juillet à septembre 2014.
En modification de l'arrêt attaqué, l'intimée sera dès lors condamnée à verser à la recourante la somme brute totale de 49'182 fr.55 - soit 35'277 fr.55 (39'397 fr. - 4'119 fr.45) à titre de dommages-intérêts pour la période du 1er octobre 2014 au 31 janvier 2015 auxquels s'ajoutent 13'905 fr. déjà alloués par la cour cantonale - sous déduction de 7'797.32 euros; le montant portera intérêts à 5% l'an à partir du 1er février 2015, conformément aux conclusions de la recourante.
5.2.2. Sauf cas exceptionnel, l'employé licencié de manière injustifiée a droit en outre à une indemnité représentant au maximum six mois de salaire, que le juge fixera en tenant compte de toutes les circonstances (<ref-law>; <ref-ruling> consid. 3.1 p. 407). Cette indemnité est de même nature et vise les mêmes buts que l'indemnité prévue à l'<ref-law> en cas de licenciement abusif (<ref-ruling> consid. 3.1 p. 407; <ref-ruling> consid. 2a p. 7), les critères d'octroi étant au surplus identiques (cf. <ref-law>).
Invoquant un congé-représailles au sens de l'art. 336 al. 1 let. d CO, l'employée réclame précisément une indemnité fondée sur l'<ref-law> et a obtenu gain de cause devant les premiers juges. Vu le raisonnement qu'elle a adopté, la cour cantonale n'a pas examiné si le congé du 13 mai 2014 était abusif et a considéré qu'une indemnité fondée sur l'<ref-law> n'entrait pas en considération. Comme cette indemnité-ci a la même nature juridique que l'indemnité fondée sur l'<ref-law> à laquelle la recourante a finalement droit, force est de conclure que la Chambre des prud'hommes a violé le droit fédéral en rejetant la prétention correspondante de l'employée.
La recourante prétend à un mois de salaire fixe et variable, reprenant ainsi le montant qui lui avait été alloué à ce titre en première instance. L'appréciation du Tribunal des prud'hommes, qui prenait notamment en compte la courte durée des rapports de travail, peut être confirmée sans autre. L'intimée sera condamnée à verser à la recourante la somme de 8'969 fr.55, plus intérêts à 5% l'an dès le 1er février 2015.
6.
En définitive, la recourante obtient gain de cause sur la quasi-totalité de ses prétentions, même si le raisonnement de la cour de céans diffère de celui développé dans le recours. Point n'est dès lors besoin d'examiner les griefs tirés de l'interdiction de l'arbitraire, de la violation de l'<ref-law> et de l'abus de droit.
7.
L'intimée, qui succombe, prendra à sa charge les frais judiciaires (<ref-law>), qui ne seront pas fixés selon le tarif réduit étant donné la valeur litigieuse en cause (cf. art. 64 al. 4 let. c LTF). En outre, elle versera des dépens à la recourante (art. 68 al. 1 et 2 LTF).

Par ces motifs, le Tribunal fédéral prononce:
1.
Le recours est admis et l'arrêt attaqué est réformé dans le sens suivant:
Clinique B._ Sàrl est condamnée à verser à A._ la somme brute de 49'182 fr.55 avec intérêts à 5% l'an dès le 1 er février 2015, sous déduction du montant de 7'797.32 euros.
Clinique B._ Sàrl est condamnée à verser à A._ la somme nette de 8'969 fr.55 avec intérêts à 5% l'an dès le 1 er février 2015.
2.
La cause est renvoyée à la Chambre d'appel des prud'hommes pour nouvelle décision sur les frais de la procédure cantonale.
3.
Les frais judiciaires, arrêtés à 2'000 fr., sont mis à la charge de l'intimée.
4.
L'intimée versera à la recourante une indemnité de 2'500 fr. à titre de dépens.
5.
Le présent arrêt est communiqué aux mandataires des parties et à la Chambre des prud'hommes de la Cour de justice du canton de Genève.
Lausanne, le 10 décembre 2019
Au nom de la Ire Cour de droit civil
du Tribunal fédéral suisse
La Présidente : Kiss
La Greffière : Godat Zimmermann