Faits : A. A.a. Par contrat de travail du 12 mars 2011, la société A._ SA (ci-après: l'employeuse) a engagé B._ (ci-après: l'employé) en qualité de chef de projet à partir du 9 mai 2011 pour une durée indéterminée. Le salaire annuel convenu était de 195'000 fr. bruts, payable en douze mensualités, pour un engagement à plein temps. Un bonus pouvait être payé à la fin de l'année, mais celui-ci était exceptionnel, incertain dans son principe et son montant et entièrement discrétionnaire. L'employé déclarait accepter que le bonus ne soit pas garanti d'une année à l'autre, même si un bonus lui était payé plusieurs années de suite. En outre, le bonus ne pouvait être octroyé que si le contrat de travail n'avait pas été résilié par l'une ou l'autre partie à la date à laquelle le bonus devrait être payé. A.b. L'employé a perçu des gratifications de 19'000 fr. en décembre 2011 (compte tenu des résultats de la société et de l'appréciation de ses performances pour 2011), de 16'413 fr. en juillet 2012, de 19'400 fr. en décembre 2012 (compte tenu des résultats de la société et de l'appréciation de ses performances pour 2012), et enfin de 33'000 fr. en décembre 2013 (compte tenu des résultats de la société et de l'appréciation de ses performances pour 2013). L'employeuse a rappelé le caractère discrétionnaire du bonus dans chaque courrier accompagnant le versement du bonus. L'employé n'a touché aucun bonus pour l'année 2014, étant relevé que son salaire était alors de 201'012 fr. bruts. Il s'est aperçu du non-versement de son bonus dans le premier quart du mois de janvier 2015; il s'en est ouvert auprès de ses collègues, qui lui ont confirmé en avoir reçu un. Selon les dires de l'employeuse, le directeur et le directeur adjoint de la division X._ n'ont pas reçu de bonus en 2014. En revanche, tous les membres du département Y._ (rattaché à la division précitée), dont l'employé faisait partie, ont reçu en décembre 2014 un bonus pour l'année écoulée. A.c. Lors d'une réunion qui s'est tenue le 27 janvier 2015, le supérieur hiérarchique de l'employé et une membre des ressources humaines (C._) lui ont signifié la suppression de son poste de travail. Ils lui ont remis une lettre de licenciement indiquant que les rapports de travail prendraient fin le 30 avril 2015 et qu'il était libéré de son obligation de travailler. Son poste était supprimé en raison de la réorganisation du département Y._. Une indemnité de départ de 33'502 fr. bruts, correspondant à deux mois de salaire, lui serait allouée à titre discrétionnaire, à la double condition que la date de fin des rapports de travail (30 avril 2015) «ne soit pas décalée dans le temps en raison d'une incapacité de travail de quelque nature que ce soit» et que son comportement et ses déclarations ne portent pas préjudice à la société. L'employé a refusé de contresigner la lettre de licenciement, que l'employeuse lui a alors adressée par courrier recommandé réceptionné le 2 février 2015. A.d. Par courrier du 27 février 2015, l'employé s'est formellement opposé à son licenciement. Il a notamment contesté les raisons invoquées et a réclamé le paiement de son bonus relatif à l'année 2014. Par pli du 10 mars 2015, l'employeuse a répondu que son licenciement lui avait été valablement signifié le 27 janvier 2015, maintenant pour le surplus les motifs invoqués dans la lettre de résiliation. Elle a ajouté que l'octroi du bonus était discrétionnaire et qu'elle avait décidé de ne pas lui en octroyer pour 2014. A.e. Un plan d'intéressement prévoyait que l'employé reçoive gratuitement et à titre discrétionnaire des actions de la société-mère de l'employeuse. Un droit d'emption était réservé au profit de la société et du groupe, notamment en cas de résiliation des rapports de travail. Un litige a surgi également sur ce point. B. B.a. L'employé a assigné l'employeuse et la société-mère par requête de conciliation du 8 septembre 2015. Il a ensuite porté l'action le 22 février 2016 devant le Tribunal des prud'hommes du canton de Genève. Il concluait au paiement de 248'528 fr. plus intérêts, notamment à titre de salaire pour le mois de mai 2015, de bonus pour l'année 2014, d'indemnité contractuelle de licenciement, d'indemnité pour licenciement abusif et de rachat des actions. B.b. L'audition des parties et des témoins a révélé que les départements administratifs, techniques et «...» recevaient une enveloppe pour les bonus, que le chef de division devait ensuite répartir entre les collaborateurs en fonction de différents critères tels que la qualité du travail, le respect des délais, etc. Interrogée comme partie au sens de l'art. 191 CPC, C._, membre des ressources humaines, a déclaré qu'aucun bonus n'avait été versé à B._ car la société avait décidé de s'en séparer; toutefois, une indemnité de licenciement correspondant à deux mois de salaire devait lui être allouée à bien plaire, ce qui compensait le non-versement de son bonus. Celle-ci aurait été versée à l'employé s'il n'avait pas contesté son licenciement. B.c. Par jugement du 24 janvier 2017, le Tribunal des prud'hommes a condamné l'employeuse à verser à l'employé 33'502 fr. bruts, sous déduction des charges sociales et légales usuelles, à titre d'indemnité contractuelle de licenciement. La société-mère devait en outre lui verser 21'818 fr. 54 pour le rachat d'actions. Examinant la prétention en paiement d'un bonus pour l'année 2014, seule litigieuse devant le Tribunal fédéral, l'autorité prud'homale a jugé que le bonus prévu par le contrat de travail était une gratification proprement dite (art. 322d CO) que l'employeuse n'avait aucune obligation de verser, dès lors qu'elle en avait réservé le caractère discrétionnaire lors des précédents versements. Sous l'angle de l'égalité de traitement, il s'avérait que d'autres personnes - soit le directeur de la division X._et son adjoint - n'avaient pas perçu de bonus; de surcroît, la décision de licencier l'employé constituait un motif suffisant pour justifier une éventuelle différence de traitement d'avec les autres employés. B.d. Statuant le 6 novembre 2017 sur appel de l'employé et appels joints de l'employeuse et de la société-mère, la Cour de justice du canton de Genève a partiellement réformé cette décision. En définitive, l'employeuse a été condamnée à verser à l'employé 33'502 fr. bruts à titre d'indemnité contractuelle de licenciement et 23'450 fr. bruts à titre de bonus pour l'année 2014, les déductions sociales et légales usuelles devant être opérées par qui de droit sur ces montants. La Cour a en outre ordonné à l'employeuse de transférer à l'employé la propriété de 700 actions de la société-mère. Quant à cette dernière, elle a été condamnée à verser à l'employé 19'738 fr. 54 pour le rachat d'actions. C. L'employeuse a interjeté un recours en matière civile au Tribunal fédéral, tendant à faire supprimer sa condamnation au paiement d'un bonus de 23'450 fr., subsidiairement à faire fixer le bonus à un montant n'excédant pas 8'000 fr. L'autorité précédente s'est référée à son arrêt. L'employé a conclu au rejet du recours. L'employeuse a répliqué, suscitant une brève duplique de la partie adverse.