Faits :
A.
Le 1 er septembre 1999, X._ a été engagée en qualité de stagiaire par A._, institution spécialisée dans le domaine du handicap psychique. Par la suite, elle a occupé un poste d'auxiliaire à un taux d'activité variant entre 50 et 100%, puis, dès le 15 juin 2006, elle a travaillé comme éducatrice diplômée à un taux d'activité oscillant entre 80 et 90%. Depuis le 1 er juin 2008, son salaire mensuel brut pour un emploi à 90% s'élevait à 5'639 fr.80, payés treize fois l'an.
Selon un rapport d'appréciation du personnel du 27 novembre 2013, l'employée répondait aux exigences de l'employeuse.
X._ était syndiquée et représentait le personnel auprès de la direction de l'institution. En février 2013, le groupe «...», dont l'employée faisait partie, a requis de l'employeuse le paiement d'heures supplémentaires à un taux majoré, ce qui a été refusé. Les parties ont trouvé un arrangement, lequel a été suivi de l'envoi d'une lettre d'information au personnel; ce courrier n'a guère plu à l'employée, qui l'a fait savoir à la direction. X._ a créé alors un groupe syndical afin de défendre les intérêts de son équipe et en a informé la direction. A cette époque, le climat était délétère entre la direction et le personnel, assisté d'un syndicat, et la communication était difficile; durant l'année 2013, de multiples courriers ont été échangés entre ces deux parties.
Le 26 janvier 2014, une altercation est survenue entre X._ et une résidente de l'institution. L'employée a admis avoir "tapoté" la tête de la résidente avec un carton d'emballage de bière en lui disant, sur le ton d'une boutade, "arrêtez de vous prendre la tête pour si peu" et avoir "parlé fortement". Pour sa part, la résidente a prétendu que l'employée l'avait "tapée" et qu'il y avait eu "des cris"; elle souffrait de troubles psychiques et avait déjà créé à plusieurs reprises des conflits avec des éducateurs.
L'employeuse s'est entretenue avec la résidente au sujet de l'incident. En revanche, elle n'a pas pris la peine d'entendre oralement l'employée, ni même d'éventuels témoins de la scène qui s'est déroulée dans les locaux communs: elle s'est contentée d'un rapport rédigé par l'employée sur les faits survenus.
Dès le 24 février 2014, X._ s'est trouvée en incapacité de travail. Afin que les rapports de travail puissent reprendre dans de bonnes conditions, l'employeuse a proposé un entretien à l'employée. Celle-ci a accepté par le truchement de son psychiatre traitant, dont le cabinet devait abriter la rencontre. Pourtant à l'origine de la demande d'entretien, le responsable de la résidence a décliné l'invitation. Par courrier du 15 avril 2014, l'employée a demandé à l'employeuse de lui faire part de ses propositions en vue de la reprise de son travail. L'institution n'a pas donné suite à la requête et aucun entretien n'a finalement été organisé.
Par courrier du 24 avril 2014, l'employeuse a libéré X._ de son obligation de travailler jusqu'à la date présumée de son accouchement. S'enquérant le 28 avril 2014 des motifs de cette mesure, l'employée s'est vu répondre, près de deux mois plus tard, que la libération de l'obligation de travailler lui avait été signifiée "à la suite et en raison du comportement inacceptable qu'elle a[vait] eu à l'égard de l'une de[s] résidentes, qui s'inscri[vait] en rupture totale avec ses obligations professionnelles et tous les principes éthiques et règles en vigueur, dans le respect des droits de[s] résidents, en vue d'assurer [le] bon fonctionnement [de l'institution] et des services de qualité irréprochable ". L'employeuse ajoutait qu'il s'agissait d'un juste motif de licenciement immédiat, mais qu'elle renonçait à une telle mesure puisque l'employée était en incapacité de travail, tout en relevant qu'elle ne pouvait "envisager de lui donner la possibilité de reprendre son travail au terme de son congé maternité ". U ne rencontre était proposée en vue de " trouver une solution et de mettre un terme à la relation de travail par accord mutuel ".
X._ a contesté avoir eu un comportement inacceptable et a nié l'existence d'un juste motif de licenciement. A l'invitation de l'employée, l'employeuse a précisé qu'elle faisait référence à l'altercation du 26 janvier 2014.
Par courrier du 23 février·2015, l'employeuse a résilié le contrat de travail de l'employée pour le 31 mai 2015" pour les raisons qui [lui étaient] connues et invoquées lors des différents échanges avec le [syndicat] ". Elle l'a en outre libérée de son obligation de travailler jusqu'au terme du délai de congé.
L'employée s'est opposée à son licenciement.
B.
Le 28 mai 2015, X._ a déposé une requête de conciliation puis, le 24 novembre 2015, elle a saisi le Tribunal des prud'hommes de l'arrondissement de la Gruyère d'une demande en paiement et en délivrance d'un certificat de travail complet à l'encontre de A._. Elle a conclu à ce que la défenderesse lui verse 30'000 fr. pour congé abusif, lui établisse un " bon certificat de travail reflétant l'excellent travail qu'elle a fourni au sein de l'employeuse depuis le 1er septembre 1999"et renonce à la dénoncer à la Commission de surveillance des professions de la santé.
L'employeuse n'a pas déposé de réponse dans le délai imparti, pas plus que dans le délai supplémentaire qui lui a été octroyé à cette fin. Sa requête en restitution de délai a été rejetée par la Présidente du Tribunal des prud'hommes, laquelle a écarté du dossier le mémoire de réponse déposé hors délai.
Le 5 mars 2016, l'employée a modifié ses conclusions en ce sens qu'elle a ajouté une demande d'indemnité pour tort moral de 3'000 fr. et a précisé le contenu du certificat de travail qu'elle demandait à son employeuse de lui délivrer, tout en requérant qu'il le soit sous la menace de la peine d'amende de l'art. 292 CP; elle a également abandonné son chef de conclusions tendant à ce que l'employeuse renonce à la dénoncer auprès de la commission précitée.
Le 4 avril 2016, l'employeuse s'est spontanément déterminée sur ces nouvelles conclusions. Sa détermination a été déclarée irrecevable au motif qu'elle revenait sur l'ensemble des faits allégués par la demanderesse et s'apparentait ainsi au dépôt d'une réponse, alors qu'elle était forclose. Un délai lui a été imparti afin de se déterminer exclusivement sur les conclusions modifiées. Dans son écriture du 6 septembre 2016, l'employeuse - non sans conclure au rejet de ces dernières - a une nouvelle fois fait état de sa position sur les faits allégués dans la demande, sans que ces faits ne puissent être considérés comme nouveaux. Le tribunal n'en a ainsi pas tenu compte dans le cadre du jugement qu'il a rendu.
Lors de deux séances, le tribunal a interrogé les parties et recueilli un témoignage, sollicité par l'employeuse.
Par jugement du 24 août 2017, le Tribunal des prud'hommes a partiellement admis la demande et condamné l'employeuse, d'une part, à payer à l'employée la somme brute de 25'379 fr.10 plus intérêts à 5% dès le 1 er juin 2015 - au titre d'indemnité pour licenciement abusif correspondant à 4,5 mois de salaire - et, d'autre part, à lui délivrer immédiatement, sous la menace de la peine d'amende prévue par l'art. 292 CP, un certificat de travail correspondant à celui sollicité.
La II e Cour d'appel civil du Tribunal cantonal du canton de Fribourg a rejeté l'appel de l'employeuse dans un arrêt du 18 mai 2018.
C.
A._ forme un recours en matière civile. Elle conclut principalement à ce qu'il soit dit que le licenciement respecte les art. 328, 335 et 336 CO si bien qu'aucune indemnité à titre de licenciement abusif n'est allouée à l'employée et à ce qu'il soit prononcé qu'elle établira en faveur de cette dernière un certificat "conforme à la réalité et à la loi".
Ni X._, ni la cour cantonale n'ont été invitées à se déterminer.

Considérant en droit :
1.
1.1. Le recours a été interjeté en temps utile (art. 45 al. 1 et art. 100 al. 1 LTF) contre un arrêt rendu en matière civile (art. 72 al. 1 LTF) par le tribunal supérieur d'un canton statuant sur recours (art. 75 LTF) dans une cause dont la valeur litigieuse atteint le seuil de 15'000 fr. prévu en matière de droit du travail (art. 74 al. 1 let. a LTF). Rien ne fait dès lors obstacle à l'entrée en matière. Demeure réservé l'examen des griefs invoqués par la recourante.
1.2. Le recours en matière civile peut être exercé pour violation du droit fédéral (art. 95 let. a LTF), 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 (art. 106 al. 1 LTF). Compte tenu de l'exigence de motivation figurant à l'art. 42 al. 1 et 2 LTF, sous peine d'irrecevabilité (art. 108 al. 1 let. b LTF), 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; <ref-ruling> 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 (art. 106 al. 2 LTF; <ref-ruling> consid. 1.4 in fine).
1.3. Le Tribunal fédéral statue sur la base des faits établis par l'autorité précédente (art. 105 al. 1 LTF). 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'art. 95 LTF (art. 105 al. 2 LTF). "Manifestement inexactes" signifie ici "arbitraires" (ATF <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 (art. 97 al. 1 LTF). La critique de l'état de fait retenu est soumise au principe strict de l'invocation énoncé par l'art. 106 al. 2 LTF (<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 ces conditions 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 (art. 99 al. 1 LTF).
En l'espèce, la recourante ne remet pas valablement en cause l'état de fait établi par les instances fribourgeoises; elle s'en écarte tant dans son "exposé des faits" que dans la motivation de son recours, sans satisfaire aux exigences rappelées ci-dessus. La cour de céans s'en tiendra dès lors aux faits retenus dans l'arrêt attaqué.
2.
2.1. Chaque partie peut décider unilatéralement de mettre fin à un contrat de travail de durée indéterminée (art. 335 al. 1 CO). Ce droit est toutefois limité par les dispositions sur le congé abusif (art. 336 ss CO). L'art. 336 CO énumère des cas de résiliation abusive. Cette liste n'est pas exhaustive; elle concrétise avant tout l'interdiction générale de l'abus de droit. Un congé peut ainsi se révéler abusif dans d'autres situations que celles décrites par la loi; elles doivent apparaître comparables, par leur gravité, aux hypothèses expressément envisagées (<ref-ruling> consid. 2.3; <ref-ruling> consid. 4.2 p. 538).
Le caractère abusif du congé peut découler notamment du motif répréhensible qui le sous-tend (l'art. 336 CO en énonce une liste), ou encore de la manière dont il est donné, de la disproportion évidente des intérêts en présence ou de l'utilisation d'une institution juridique de façon contraire à son but (<ref-ruling> consid. 2.3 p. 515; <ref-ruling> consid. 2.2 et 2.4). Il y a en principe abus lorsque le motif invoqué n'est qu'un simple prétexte tandis que le véritable motif n'est pas constatable (<ref-ruling> consid. 4.1 in fine; cf. aussi <ref-ruling> consid. 2.1 p. 62 en matière de bail).
Pour apprécier le caractère abusif ou non d'un congé, il faut se fonder sur son motif réel. Déterminer le motif d'une résiliation est une question de fait (<ref-ruling> consid. 2.3 in fine p. 515). En revanche, savoir si le congé est abusif relève du droit (arrêt 4A_714/2014 du 22 mai 2015 consid. 3.3).
2.2. La cour cantonale a considéré que le congé était abusif sur la base d'une double motivation, chacune étant suffisante pour sceller le sort de la cause.
D'une part, l'employeuse avait invoqué comme motif de congé l'altercation survenue entre l'employée et une résidente en date du 26 janvier 2014. Or, tel n'était pas le motif réel du congé, la véritable raison du licenciement consistant dans l'activité syndicale de l'employée, instigatrice, en sa qualité de représentante du personnel, de nombreuses revendications qui s'étaient révélées sources de tensions entre les parties en 2013. Le congé était ainsi abusif au sens de l'art. 336 al. 2 let. a CO.
D'autre part, la recourante avait mis un terme au contrat de travail sans faire preuve des égards nécessaires et en portant atteinte aux droits de la personnalité de l'intimée. En effet, vu l'importance des accusations formulées à l'encontre de l'employée, il incombait à l'employeuse à tout le moins de l'entendre, voire de confronter les deux protagonistes de l'altercation, ce qu'elle n'avait pas fait. Il était choquant que la recourante ait pris pour argent comptant les dires d'une résidente, sans que l'employée ait pu faire valoir sa défense oralement et sans qu'il soit procédé à des investigations, alors même que l'altercation s'était déroulée dans une pièce commune de l'institution, que l'intimée était accusée de faits graves et se trouvait sous la menace d'une dénonciation à la Commission de surveillance des professions de la santé pour des faits de maltraitance. Le procédé était d'autant plus intolérable que la résidente, qui souffrait de troubles psychiques, avait déjà créé à plusieurs reprises des conflits avec des éducateurs - querelles dont l'employeuse avait connaissance - de sorte qu'il s'imposait de considérer avec la plus grande prudence ses accusations contre une employée ayant donné satisfaction depuis seize ans.
2.3. La recourante ne paraît pas remettre en cause la seconde de ces deux motivations, de sorte que la recevabilité de son recours est sujette à caution (<ref-ruling> consid. 2.4 p. 368; <ref-ruling> consid. 4.1.4 p. 100; <ref-ruling> consid. 3.4 p. 735).
En tout état de cause, ses griefs sont mal fondés, pour autant qu'ils soient recevables.
2.3.1. Dans un premier grief, la recourante fait valoir que la cour cantonale aurait écarté, en violation du CPC, les déclarations du seul témoin entendu. On ne sait toutefois sur quel point précis ces déclarations seraient déterminantes. En effet, la recourante affirme que ledit témoin n'a ajouté aucun élément supplémentaire par rapport à ce que l'employée avait elle-même allégué. Le grief doit donc être écarté, dans la mesure où il est recevable.
2.3.2. Dans un deuxième grief, la recourante reproche à la cour cantonale d'avoir versé dans l'arbitraire en ne constatant pas que l'employée avait porté atteinte à l'intégrité physique d'une résidente. Selon elle, l'intimée aurait admis elle-même avoir levé la main sur une résidente. La recourante joue sur les mots, sans que sa thèse ne corresponde aux faits constatés dans l'arrêt attaqué. Il y a une différence de taille entre les versions des deux protagonistes de l'altercation. Il n'est dès lors pas possible de suivre le raisonnement de la recourante, fondé sur cette prémisse erronée. Et lorsqu'elle affirme que l'art. 335 CO autorise chaque partie à mettre un terme au contrat de travail sans motif particulier, la recourante perd de vue les dispositions relatives au congé abusif (art. 336 ss CO).
2.3.3. Dans un troisième grief, la recourante reproche à la cour cantonale d'avoir retenu des faits qui n'étaient pas suffisamment prouvés par l'intimée, sans préciser de quoi il s'agit. Faut-il par ailleurs rappeler que, selon l'arrêt attaqué, les allégués de la demande ont été tenus pour constants, dès lors que l'employeuse n'avait pas déposé sa réponse dans les délais prescrits. N'étant ainsi pas contestés, les allégués de l'employée étaient dispensés de preuve. Le fait que la cause ait été citée aux débats principaux n'y changeait rien dans la mesure où aucun élément du dossier ne donnait à penser que les affirmations de l'employée n'étaient pas véridiques. Ce raisonnement n'est pas remis en cause, ce qui scelle le sort du grief, qui doit être rejeté.
2.3.4. Dans un quatrième et ultime grief, la recourante expose que les juges précédents ont violé l'art. 330a CO en la condamnant à délivrer à l'intimée un certificat de travail conforme au texte de son cru. Son unique argument réside toutefois en ce que le licenciement en cause ne serait, selon elle, pas abusif. Or, ce grief-ci a déjà été écarté, de sorte qu'il ne saurait en être autrement de celui-là.
3.
En conclusion, la cour de céans peut se rallier à l'appréciation des juges fribourgeois sur le caractère abusif du licenciement, du reste non critiquée en tant que telle par la recourante. Il s'ensuit que le recours doit être rejeté, dans la mesure où il est recevable.
A titre de partie qui succombe, la recourante prendra à sa charge les frais judiciaires (art. 66 al. 1 LTF). Il n'est pas alloué de dépens à l'intimée, qui n'a pas été invitée à se déterminer.

Par ces motifs, le Tribunal fédéral prononce :
1.
Le recours est rejeté dans la mesure où il est recevable.
2.
Les frais de procédure, fixés à 1'000 fr., sont mis à la charge de la recourante.
3.
Le présent arrêt est communiqué aux mandataires des parties et à la IIe Cour d'appel civil du Tribunal cantonal de l'État de Fribourg.
Lausanne, le 20 août 2018
Au nom de la Ire Cour de droit civil
du Tribunal fédéral suisse
La Présidente : Kiss
La Greffière : Godat Zimmermann