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'art. 82 CO 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'art. 82 CO 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'art. 82 CO 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'art. 334 CPC - 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.