Faits:
A.
Depuis le 15 juillet 2007, Y._ et Z._ sont locataires d'un appartement de trois pièces à Genève, pour un loyer de 15'672 fr. et des charges de 1'500 fr. par an (soit 1'306 fr. resp. 125 fr. par mois). Le 15 juillet 2010, ils ont engagé contre la bailleresse X._ SA une procédure en exécution de travaux et en réduction momentanée de loyer qui a été tranchée par jugement du 1er février 2012.
Par contrat du 29 novembre 2010, les locataires ont remis l'appartement en sous-location à A._ pour un loyer mensuel de 1'500 fr., charges comprises. Le contrat, conclu pour une durée d'une année, était renouvelable moyennant l'accord écrit des deux parties.
Le lendemain 30 novembre 2010, les locataires ont informé la régie immobilière en charge de l'immeuble que la locataire Z._ quittait l'appartement et renonçait au bail, tandis que le locataire Y._, en raison d'un séjour professionnel à l'étranger, allait sous-louer l'appartement meublé à A._ pour une durée de douze à vingt-quatre mois, moyennant un loyer mensuel de 1'500 fr., charges comprises. La régie a refusé de libérer la locataire Z._ et a sollicité des informations complémentaires. Les locataires ont fourni une copie du contrat de sous-location, mais n'ont pas donné les informations requises concernant le séjour professionnel du locataire Y._ à l'étranger.
La régie a refusé d'autoriser la sous-location en invoquant deux motifs: d'une part, les locataires refusaient de lui communiquer des précisions sur le séjour professionnel à l'étranger du locataire Y._; d'autre part, le contrat de sous-location ne prévoyait pas de répercuter sur le sous-loyer la réduction de loyer sollicitée dans la procédure judiciaire qui était alors en cours. La régie a sommé les locataires de réintégrer les lieux au plus tard le 28 février 2011, faute de quoi le bail serait résilié en vertu de l'<ref-law>.
Par courrier du 20 février 2011, les locataires ont fait savoir qu'ils refusaient de réintégrer le logement. Ils ont précisé que le locataire Y._ avait eu une opportunité de travailler comme ingénieur géologue en Côte d'Ivoire pour une durée de deux ans, mais qu'en raison de la situation politique et sécuritaire dans ce pays, il avait finalement renoncé à ce projet sans toutefois dénoncer le contrat de sous-location. Ils ont produit une attestation de la sous-locataire certifiant qu'il était prévu de répercuter une éventuelle réduction de loyer sur le sous-loyer.
Par avis officiel du 16 mars 2011 se référant à l'<ref-law>, la bailleresse a résilié le contrat avec effet immédiat pour le 30 avril 2011, en raison du refus des locataires de réintégrer l'appartement.
B.
B.a. Le 12 avril 2011, les locataires ont saisi la Commission genevoise de conciliation en matière de baux et loyers; la conciliation n'a pas abouti. Le 5 juillet 2011, ils ont déposé une demande en contestation du congé devant le Tribunal des baux et loyers.
Le 29 novembre 2011, le locataire Y._ a informé la régie qu'il prolongeait la sous-location, précisant qu'il était en recherche d'emploi et avait la ferme intention de réintégrer l'appartement à brève échéance, une fois sa situation stabilisée.
Par jugement du 14 septembre 2012, le Tribunal des baux et loyers a constaté la validité du congé. Il a en particulier retenu que si le locataire Y._ avait peut-être encore l'intention de partir à l'étranger au début de l'année 2010, ce projet n'était plus d'actualité au moment où il avait remis son appartement en sous-location; cette remise avait coïncidé avec l'emménagement chez une dame qui allait donner naissance à leur enfant commun au début du mois d'août 2011.
B.b. Le 29 octobre 2012, les locataires ont interjeté appel. Statuant par arrêt du 7 août 2013, la Chambre des baux et loyers de la Cour de justice a annulé le jugement de première instance et constaté l'inefficacité du congé.
La Chambre a notamment retenu ce qui suit: Les explications du locataire selon lesquelles il a la ferme intention de réintégrer son appartement, moyennant l'obtention préalable d'un travail à Genève lui permettant d'en assumer le loyer, ne sont nullement incohérentes. Les circonstances qui l'ont initialement amené à sous-louer l'appartement - à savoir une opportunité professionnelle en Côte d'Ivoire, qui n'a finalement pas abouti en raison de la situation politique instable - sont établies et légitimes. Il en va de même des circonstances qui l'ont empêché de réintégrer jusqu'alors l'appartement, à savoir son incapacité à assumer seul le loyer courant ensuite de chômage et d'épuisement du droit aux indemnités journalières dès février 2012. Le fait qu'il ait logé chez sa compagne et mère de leur enfant, le temps de trouver du travail à Zurich, n'annihile pas non plus la crédibilité de sa thèse, ce d'autant plus (sic!) qu'il était logé gratuitement. Enfin, qu'il ait trouvé un emploi et un logement à Zurich ne permet pas non plus d'exclure la ferme intention de revenir par la suite à Genève afin de se rapprocher de sa fille, lorsque sa situation professionnelle le permettra.
C.
La bailleresse (ci-après: la recourante), qui agit sans être représentée par un avocat, saisit le Tribunal fédéral d'un recours en matière civile; elle conclut principalement à ce que l'appel cantonal des locataires soit déclaré irrecevable, subsidiairement à ce que la validité du congé donné le 16 mars 2011 soit constatée. Les locataires (ci-après: les intimés) concluent au rejet du recours et à la confirmation de l'arrêt attaqué. L'autorité précédente se réfère à son arrêt.

Considérant en droit:
1.
La recourante soutient d'abord que l'appel cantonal des locataires a été introduit tardivement. A son avis, le délai de recours a commencé à courir le jour où le postier a tenté de notifier le jugement de première instance à l'avocate des locataires; celle-ci, en tant que professionnelle susceptible de recevoir tous les jours des actes judiciaires par la voie postale, devait organiser une réception diligente des actes susceptibles de lui être notifiés. Il y aurait lieu d'appliquer la théorie de la réception absolue et de retenir que le délai était échu le 21 octobre 2012.
La Chambre cantonale a constaté que le postier avait vainement tenté de notifier le jugement de première instance à l'avocate des locataires le 20 septembre 2012, que le délai de garde avait expiré le jeudi 27 septembre, que le délai d'appel de trente jours avait couru jusqu'au samedi 27 octobre 2012 et qu'il avait été prolongé jusqu'au jour ouvrable suivant, à savoir le lundi 29 octobre 2012. L'appel avait précisément été déposé ce jour-là, soit en temps utile.
Selon l'<ref-law>, l'acte judiciaire est réputé notifié lorsqu'il a été remis au destinataire (al. 2). Il est en outre réputé notifié, en cas d'envoi recommandé, lorsque celui-ci n'a pas été retiré, à l'expiration d'un délai de sept jours à compter de l'échec de la remise, si le destinataire devait s'attendre à recevoir la notification (al. 3 let. a). La théorie de la réception absolue ne s'applique donc pas.
La Chambre cantonale n'a pas explicitement constaté à quelle date l'avocate des locataires avait réceptionné le jugement de première instance. Mais rien n'indique que l'acte aurait été retiré avant l'échéance du délai de garde; au contraire, l'arrêt attaqué évoque une prolongation de délai accordée par la poste, et les parties s'accordent à dire que le retrait a eu lieu le 2 octobre 2012. Le grief de tardiveté est infondé.
2.
La recourante se plaint ensuite d'établissement inexact des faits. Elle fait grief à la Chambre cantonale de ne pas avoir retenu les faits nouveaux qu'elle aurait régulièrement introduits au stade de l'appel.
Le Tribunal fédéral statue sur la base des faits établis par l'autorité précédente (<ref-law>); en tant que cour suprême, il est instance de révision du droit, et non pas juge du fait. Il peut certes rectifier ou compléter les faits s'ils ont été établis de façon manifestement inexacte - c'est-à-dire arbitraire, ce pour autant que la correction soit susceptible d'influer sur le sort de la cause (art. 97 al. 1 et art. 105 al. 2 LTF). Néanmoins, l'exception prévue par ces dispositions ne permet pas aux parties de rediscuter les faits de la cause comme si elles plaidaient devant un juge d'appel. S'il entend faire rectifier l'état de fait, le recourant doit expliquer de manière circonstanciée en quoi les conditions pour ce faire seraient réalisées (<ref-ruling> consid. 6.2); dans la mesure où le grief a trait au caractère arbitraire de l'établissement des faits, les exigences de motivation sont celles, plus strictes, de l'<ref-law> (<ref-ruling> consid. 1.4.3).
Le litige porte en l'occurrence sur la validité du congé donné le 16 mars 2011. Pour se prononcer sur cette question, il faut se placer au moment où le congé a été signifié. Des faits survenant ultérieurement ne sont pas susceptibles d'influer a posteriori sur cette qualification; tout au plus peuvent-ils fournir un éclairage sur les intentions des parties au moment de la résiliation (<ref-ruling> consid. 2.1 in fine p. 62; arrêt 4A_623/2010 du 2 février 2011 consid. 2.4). La recourante ne démontre pas en quoi les faits en question seraient importants pour juger de la validité du congé donné le 16 mars 2011. Il n'y a pas à entrer en matière plus avant (cf. au surplus infra, consid. 4.1 in fine).
3.
La recourante se plaint en outre d'arbitraire dans l'appréciation des faits.
3.1. L'arbitraire ne résulte pas du seul fait qu'une autre solution soit concevable, voire même préférable. Le Tribunal fédéral ne s'écarte de la décision attaquée que lorsqu'elle est manifestement insoutenable, se trouve en contradiction claire avec la situation de fait, viole gravement une norme ou un principe juridique indiscuté, ou encore lorsqu'elle heurte de manière choquante le sentiment de la justice et de l'équité. En matière d'appréciation des preuves et d'établissement des faits, il n'y a arbitraire que si le juge n'a manifestement pas compris le sens et la portée d'un moyen de preuve, si, sur la base des éléments recueillis, il a fait des déductions insoutenables, ou encore s'il a omis, sans raison sérieuse, de tenir compte d'un moyen important propre à modifier la décision attaquée (<ref-ruling> consid. 4.2).
3.2. Pour l'essentiel, la recourante se réfère à l'opinion du juge de première instance et expose longuement quelles conclusions devaient à son avis être tirées de certains faits et moyens de preuve. Il s'agit d'une motivation largement appellatoire qui, au surplus, se rapporte partiellement à des faits postérieurs à la date de résiliation du contrat de bail, et dont il n'est pas démontré qu'ils seraient susceptibles de modifier l'appréciation des intentions des intimés à ce moment-là.
3.3. Se référant à des déclarations de l'intimé Y._, la recourante soutient que celui-ci, contrairement à ce qu'a retenu la Chambre cantonale, n'avait aucune intention clairement perceptible au moment où il a conclu le contrat de sous-location le 29 novembre 2010. L'intimé répond, sans autre explication, qu'il a renoncé au projet en Côte d'Ivoire alors que son appartement venait d'être sous-loué, ce qui sous-entend qu'il avait encore l'intention de se rendre en Côte d'Ivoire lorsqu'il a conclu le contrat de sous-location.
La Chambre cantonale, contrairement au juge de première instance, a retenu que l'intimé Y._ avait été amené à sous-louer l'appartement à cause de l'opportunité professionnelle qui s'offrait en Côte d'Ivoire. Mais elle a aussi cité les déclarations suivantes de l'intimé Y._ à l'audience du 21 mars 2012: "L'opportunité en Côte d'Ivoire s'est présentée dans le courant du premier semestre 2010. En octobre-novembre, j'ai compris que ce n'était pas opportun vu la crise en Côte d'Ivoire. C'est [dans, réd.] les quelques semaines avant décembre 2010 que j'ai conclu le contrat avec [la sous-locataire]. A ce moment-là, je me disais que si ce n'était pas la Côte d'Ivoire, ce serait ailleurs".
Il ressort de cette déposition, faite par l'intimé lui-même, qu'il n'avait plus de projet professionnel précis au moment de la conclusion du contrat de sous-location le 29 novembre 2010, comme l'a d'ailleurs retenu le juge de première instance. Dans la mesure où la Chambre cantonale dit le contraire, sa constatation non motivée doit être qualifiée d'arbitraire. Cela n'est toutefois pas encore déterminant; car l'intention de réintégrer l'objet loué dans un avenir prévisible doit être examinée au moment du congé.
3.4. A ce moment-là, l'intimé, au chômage, était logé gratuitement par sa compagne enceinte de ses oeuvres. La Chambre cantonale a constaté que cet état des choses "n'annihile pas non plus la crédibilité de la thèse soutenue par les locataires", à savoir que l'intimé avait la ferme intention de réintégrer l'objet loué "moyennant l'obtention préalable d'un travail à Genève lui permettant d'en assumer le loyer". La recourante invoque nombre d'arguments pour retenir le contraire; mais cela ne suffit pas pour démontrer que cette constatation est absolument insoutenable.
4.
La recourante, enfin, critique l'application du droit matériel par la Chambre cantonale.
4.1. Le recours en matière civile peut être interjeté pour violation du droit, tel qu'il est délimité par les art. 95 et 96 LTF. 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 rejeter un recours en adoptant une argumentation différente de celle de l'autorité précédente (<ref-ruling> consid. 1.1; cf. <ref-ruling> consid. 1.4 in fine). 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; 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. Pour ce qui concerne la violation d'un droit constitutionnel ou les questions relevant du droit cantonal ou intercantonal (<ref-law>), il ne peut s'en saisir que si le grief a été invoqué et motivé de manière précise par la partie recourante (<ref-ruling> consid. 2.2).
Dans le cadre du grief d'appréciation arbitraire des faits, la recourante reproche à la Chambre cantonale d'avoir retenu qu'en tant que bailleresse, elle devait tolérer des sous-locations s'il y avait de très vagues possibilités que le locataire réintègre les locaux, ce qui serait manifestement contraire à la jurisprudence bien établie en la matière. Il s'agit là d'une critique de l'application du droit matériel à l'état de fait arrêté.
4.2. Selon la jurisprudence, l'<ref-law> permet au bailleur de résilier un bail d'habitation dans un délai de trente jours pour la fin d'un mois lorsque le locataire, malgré un avertissement écrit, passe outre le refus fondé du bailleur de consentir à la sous-location (<ref-ruling> consid. 3.1). Une sous-location licite (<ref-law>) suppose que le locataire ait l'intention de réutiliser lui-même l'objet loué dans un avenir prévisible; de vagues intentions dans ce sens ne suffisent pas. Il y a lieu d'être relativement restrictif afin d'éviter que le droit à la sous-location ne soit dénaturé. A défaut, le bailleur peut opposer son refus (<ref-ruling> consid. 2.2.1 p. 63).
Le bailleur qui donne un tel congé supporte le fardeau de la preuve pour la validité du congé (cf. <ref-ruling> consid. 2.1 p. 61; ROGER WEBER, in Commentaire bâlois, 5 e éd. 2011, n° 8 ad <ref-law>). Il doit prouver que les conditions d'une résiliation anticipée sont données et, partant, que la sous-location n'est pas licite, par exemple parce que le locataire n'a pas l'intention de réutiliser lui-même l'objet loué dans un avenir prévisible. Apporter la preuve de ce fait interne peut être très difficile, voire impossible pour le bailleur. Il y a lieu d'admettre un devoir de collaboration du locataire (sur ce devoir en général, cf. HANS PETER WALTER, Commentaire bernois, 2012, n° 318 ss ad <ref-law>; <ref-ruling>, à propos des faits négatifs); cela se justifie d'autant plus que le congé litigieux résulte du fait que le locataire a lui-même fait valoir un droit - droit de sous-louer - que le bailleur conteste. Au surplus, le juge établit les faits d'office (art. 243 al. 2 let. c et <ref-law>).
4.3. La Chambre cantonale a constaté la situation suivante au 16 mars 2011, date à laquelle le congé litigieux a été donné: l'intimé cohabitait avec sa compagne, enceinte de leur enfant commun; il était au chômage, mais percevait encore des indemnités, qui n'ont cessé qu'une année après; il ne contribuait pas au paiement du loyer dû par sa compagne; il cherchait un travail à Genève; la crédibilité de la thèse selon laquelle il réintégrerait l'objet loué une fois qu'il aurait un emploi lui permettant d'assumer le loyer (1'431 fr., charges comprises) n'était pas annihilée.
Sur la base de ces éléments, on ne saurait retenir, chez l'intimé, une intention de réintégrer l'objet loué dans un avenir prévisible, au sens où l'entend la jurisprudence; tout au plus peut-on parler de vagues intentions. L'intimé n'a rien apporté pour démontrer une intention plus précise. Il y a lieu de retenir que la sous-location n'était pas licite et que la recourante était partant habilitée à donner un congé anticipé.
5.
Le recours doit ainsi être admis et la validité du congé constatée. Les intimés, qui succombent, supportent les frais de la présente procédure (art. 66 al. 1 et 5 LTF). Il n'est pas alloué de dépens à la recourante, qui a procédé sans être représentée par un avocat et ne prétend pas avoir subi des frais particuliers (cf. <ref-law>; <ref-ruling> consid. 4). Il n'y a ni frais ni dépens pour la procédure cantonale genevoise (<ref-law>; <ref-ruling> consid. 2).

Par ces motifs, le Tribunal fédéral prononce:
1.
Le recours est admis.
2.
Il est constaté que le congé donné le 16 mars 2011 pour le 30 avril 2011 est valide.
3.
Les frais judiciaires, arrêtés à 2'500 fr., sont mis à la charge des intimés, solidairement entre eux.
4.
Le présent arrêt est communiqué aux parties et à la Chambre des baux et loyers de la Cour de justice du canton de Genève.
Lausanne, le 14 février 2014
Au nom de la Ire Cour de droit civil
du Tribunal fédéral suisse
La Présidente: Klett
La Greffière: Monti