Faits :
A.
A.a. La société Z._ SA exploite l'hôtel... à Genève.
Cette société hôtelière était liée à A._ SA par un contrat du 11 novembre 2002 ayant pour objet l'installation, l'utilisation et la maintenance d'un système de divertissement dénommé S1._. Il s'agissait d'équiper les chambres d'hôtel d'un service d'informations, de programmes vidéo à la demande, de musique et d'un accès à Internet.
La durée minimale était de 96 mois (soit 8 ans), "période commençant à la date d'entrée en vigueur du contrat et se terminant le dernier jour du mois civil au cours duquel la dernière année contractuelle convenue, à compter de la date d'acceptation, s'[étai]t écoulée". La "date d'acceptation" était celle à laquelle la société hôtelière signait le certificat d'acceptation établi consécutivement à l'installation du système.
La société hôtelière devait payer un forfait mensuel de 65 fr. par chambre.
En cas de résiliation anticipée du contrat, A._ SA avait droit à un "forfait de résiliation anticipée" en guise de dédommagement pour (a) les forfaits mensuels dus jusqu'à la fin de la durée du contrat, (b) les coûts de financement encore supportés par A._ SA malgré la résiliation anticipée, (c) le démontage et le transport de l'équipement loué et (d) les frais d'assistance qui auraient été dus pour les chambres "installées".
Un tableau calculait le montant (dégressif) dû à titre d'indemnité forfaitaire pour résiliation anticipée en fonction du nombre de mois déjà écoulés au moment de la résiliation. Il précisait que le forfait était "calculé à compter de la date d'acceptation".
Le matériel aurait dû être installé entre décembre 2002 et janvier 2003. En raison de retards, la société hôtelière a accepté le système au mois de mars 2004 et a commencé à verser le forfait mensuel dès le mois d'avril 2004.
En dernier lieu, ce forfait s'élevait à 115 fr. 70 par mois et par chambre (au nombre de 423).
A.b. Par contrat daté du 22 octobre 2010 et signé le 29 octobre suivant, les parties ont convenu de remplacer le système S1._ par le système S2._, plus moderne et de meilleur standing. A._ SA devait céder l'usage d'un important matériel, livrer des logiciels avec des licences d'utilisation, procéder à l'installation du système dans l'hôtel et offrir un service de maintenance sous la forme d'une centrale d'appel et d'interventions in situ du personnel technique.
Ce nouveau contrat comprenait cinq documents rédigés en anglais formant un seul et même accord, soit:
I. un formulaire de commande [ Order Form],
II. une liste des prix et tarifs [ Pricing Schedule],
III. une fiche produit [ Product Schedule],
IV. des conditions générales [ General Terms], et
V. un accord sur le niveau du service de maintenance [ Service Level Agreement].
Un éventuel conflit entre les différentes parties de cet accord devait être résolu en faisant prévaloir les documents selon l'ordre exposé ci-dessus. [ If there is a conflict between any of the parts of this Agreement, the documents will prevail in the same order as set out above.]
Le formulaire de commande précisait que
- le contrat avait une durée initiale de 84 mois (soit 7 ans) [ initial term];
- la "date du contrat" [ Agreement Date] correspondait au 22 octobre 2010.
La liste des prix et tarifs indiquait que
- la rémunération de A._ SA était de 135 fr. par mois et par chambre (423), soit au total 57'105 fr. par mois.
La première mensualité devait être payée le premier jour ouvrable suivant la date d'acceptation [ Acceptance Date],
- l'indemnité pour résiliation anticipée [ Early Termination Fee] était la suivante:
nombre de chambres x 113 fr. 52 x nombre de mois restants jusqu'au terme initial [ number of unexpired months of initial term].
Les conditions générales (ci-après CG) contenaient notamment les règles suivantes:
8. (...)
(...)
8.2 Le client [i.e. la société hôtelière] s'abstiendra de fournir (et ne permettra à aucun tiers de fournir) des services, équipements ou plateformes susceptibles d'entrer en concurrence avec ceux [de A._ SA].
Toute violation de cette clause sera considérée comme une violation essentielle du contrat et A._ SA demandera au client d'y remédier dans un délai de deux semaines, faute de quoi elle pourra:
8.2.1 résilier le contrat (et le client devra payer l'indemnité pour résiliation anticipée).
(...)
12. Durée et résiliation
12.1 Ce contrat commence à la date du contrat [ Agreement Date].
12.2 A moins d'une résiliation anticipée, il continuera jusqu'au terme initial et au-delà [ thereafter], jusqu'à ce qu'une partie notifie à l'autre un avis écrit de résiliation trois mois avant le terme initial, ou avant tout "anniversaire" [ anniversary] du terme initial.
[note du Tribunal fédéral: selon le dictionnaire en ligne www.merriam-webster.com, anniversary se définit comme la récurrence annuelle d'une date marquant un événement notable].
13. Résiliation anticipée et suspension
13.1 Chaque partie peut résilier ce contrat avec effet immédiat moyennant une notification écrite à l'autre partie, si celle-ci:
13.1.1 ne paie pas une somme due selon le contrat dans un délai de quarante jours à compter de son exigibilité;
13.1.2 commet une violation essentielle du contrat (...).
14. Conséquences de la résiliation
(...)
14.1.3 Si le contrat est résilié par A._ SA conformément à l'art. 8.2.1 ou 13.1, le client payera immédiatement l'indemnité pour résiliation anticipée.
17. (...)
(...)
17.5 Cet accord constitue l'intégralité de l'accord et de l'entente entre les parties concernant l'objet du contrat et prévaut sur tous les arrangements et accords antérieurs intervenus entre les parties.
17.6 Aucune modification du contrat ne sera valable à moins d'être passée par écrit et signée par les parties ou leurs représentants.
Le 29 octobre 2010, les parties ont convenu d'un premier avenant en vertu duquel le forfait mensuel par chambre était abaissé de 135 fr. à 133 fr. 50.
L'installation complète du système S2._ supposait la mise en place d'un important matériel, notamment de grands écrans haute définition. Elle a eu lieu à la fin du mois de mai 2011. Dans l'intervalle, la société hôtelière a continué d'utiliser le système S1._ et de payer le forfait inférieur prévu par le contrat de 2002.
Le 1er juin 2011, les parties ont signé un second avenant au contrat "S2._" précisant que A._ SA fournirait 30 écrans de télévision supplémentaires et que la rémunération serait la suivante:
(...) Le loyer S2._ se monte à 135.- CHF par chambre et par mois. Base de calcul: 423 chambres. Durée du contrat: 84 mois.
Le 9 juin 2011, la société hôtelière a signé un certificat d'acceptation attestant de l'installation et du bon fonctionnement du système S2._. Dès ce moment, elle a payé le forfait y afférent de 135 fr. par mois et par chambre.
A.c. En 2013, le service de maintenance a été délocalisé en Inde, ce qui ne convenait pas à la société hôtelière.
Le système S2._ a connu une première panne majeure les 28 et 29 novembre 2013.
A.d. Dans un courriel du 26 juin 2014, la société hôtelière a fait part de son insatisfaction à A._ SA. Elle s'est plainte de la délocalisation du service de maintenance qui était atteignable uniquement pendant les heures de bureau et a déploré deux pannes majeures en 2013 et 2014. Elle a en outre critiqué le matériel jugé dépassé et trop coûteux, menaçant de prendre "des mesures" si A._ SA ne fournissait pas à brève échéance des informations financières sur les investissements effectués dans l'hôtel.
Une nouvelle panne majeure s'est produite les 7 et 8 novembre 2014 (sic!, cf. infra consid. 6.4.2 § 6).
Le 18 décembre 2014, la société hôtelière a annoncé son intention de résilier le contrat en raison de l'évolution de la technologie et des habitudes des clients qui avaient rendu le système S2._ dépassé et moins profitable.
A.e. Les 21 et 22 janvier 2015, alors que se tenait à Genève le Salon international de la haute horlogerie, une troisième panne majeure a touché l'ensemble de l'hôtel en raison d'une mise à jour lancée nuitamment par A._ SA. Dans un courriel du 21 janvier 2015, celle-ci a écrit que la confiance du "client" dans leur service et leur maintenance était irrémédiablement perdue.
Entre mars 2011 et mars 2015, la société hôtelière a répertorié 5'353 problèmes techniques dans un tableau. Dans la plupart des cas, le problème n'était pas décrit; le degré de gravité n'était en outre pas précisé.
A._ SA a rétorqué n'avoir délivré que 388 tickets de maintenance dont 110 concernaient une seule chambre. Selon elle, de nombreux problèmes étaient imputables à une mauvaise manipulation par les clients ou à des câbles débranchés.
A.f. Par courrier du 10 avril 2015, la société hôtelière a résilié le contrat pour le 31 juillet 2015. Elle dénonçait de nombreux dysfonctionnements techniques et le manque de réactivité de l'assistance technique dont le niveau de compétence la mécontentait. Certes, elle avait accepté lors d'une réunion du 28 janvier 2015 que sa cocontractante lui soumette des propositions concrètes, mais les offres présentées les 27 février et 26 mars 2015 ne la satisfaisaient pas.
A._ SA a accusé réception de la résiliation le 17 avril 2015 et a réclamé 1'632'644 fr. (hors taxe) à titre d'indemnité de résiliation anticipée, selon le calcul suivant:
423 (chambres) x 113 fr. 52 x 34 (mois restants jusqu'à l'échéance du 31 mai 2018).
Le 16 juin 2015, la société hôtelière a contesté ce calcul en arguant du fait qu'il ne restait que 27 mois jusqu'au terme initial. Elle estimait en outre que l'indemnité devait être réduite à 1'000'000 fr. en raison du manque à gagner découlant des nombreux dysfonctionnements, ainsi que d'une erreur dans le forfait qui incluait indûment des frais de licence de l'ancien système S1._ (21 fr. 37). Elle précisait également les deux facteurs "directs" l'ayant conduite à résilier le contrat, soit d'une part les désagréments inhérents aux dysfonctionnements qui avaient entraîné des pertes pécuniaires, et d'autre part la disproportion entre la qualité du service et les honoraires payés.
Peu après, la société hôtelière a versé 1'000'000 fr.
A.g. A._ SA lui a adressé une facture de 764'032 fr. 84 comprenant le forfait de résiliation anticipée (1'633'363 fr. 74) augmenté de 8 % de TVA, sous déduction de 1'000'000 fr.
N'ayant rien obtenu, elle a fait notifier le 12 novembre 2015 un commandement de payer la somme précitée, lequel a été frappé d'opposition.
B.
B.a. Le 16 juin 2017, A._ SA a assigné Z._ SA en conciliation devant le Tribunal de première instance du canton de Genève. Elle a ensuite déposé une demande tendant au paiement de 764'032 fr. 84 et à la mainlevée définitive de l'opposition formée dans la poursuite en cours.
La société hôtelière a conclu au rejet et pris des conclusions reconventionnelles par lesquelles elle réclamait principalement le paiement de 1'000'000 fr.
Par jugement du 25 novembre 2019, le Tribunal de première instance a admis la demande principale à hauteur de 632'644 fr. 64 et prononcé la mainlevée de l'opposition à due concurrence. Il a en revanche rejeté la demande reconventionnelle.
En substance, le Tribunal a jugé que la société hôtelière avait résilié le contrat sans juste motif avant le terme conventionnel. Un tel cas de figure entraînait l'obligation de payer l'indemnité forfaitaire à A._ SA, quand bien même une lecture isolée de l'art. 14.1.3 CG pouvait faire accroire le contraire. Nonobstant la lettre du contrat, les parties avaient toutes deux à l'esprit que le délai de 84 mois (déterminant le terme initial) ne commencerait à courir qu'à la date d'acceptation du système qui était survenue au début du mois de juin 2011; en conséquence, au moment de la résiliation anticipée (31 juillet 2015), il restait encore 34 mois jusqu'au terme convenu (31 mai 2018). Aussi la société hôtelière devait-elle payer l'indemnité suivante:
423 chambres x 113 fr. 52 x 34 mois = 1'632'644 fr. 64.
Ayant déjà versé 1'000'000 fr., elle restait débitrice de 632'644 fr. 64 et ne pouvait prétendre au remboursement du montant déjà versé dès lors qu'il était effectivement dû.
B.b. Statuant le 1er septembre 2020 sur appel de la société hôtelière, la Cour de justice genevoise a réfuté l'analyse du premier juge quant au point de départ du délai de 84 mois. Elle a constaté que le jour déterminant, selon la volonté réelle des parties, était la date du contrat (22 octobre 2010), de sorte qu'à la date effective de résiliation (31 juillet 2015), il restait 27 mois (et non 34) jusqu'au terme contractuel (31 octobre 2017). Elle a rectifié en ce sens le calcul de l'indemnité. Partant, elle a admis la demande à raison de 296'511 fr. 92 ([423 x 113.52 x 27] - 1'000'000) et prononcé la mainlevée définitive de l'opposition à due concurrence. Elle a confirmé au surplus le rejet de l'action reconventionnelle.
C.
Les deux parties ont saisi le Tribunal fédéral d'un recours en matière civile.
C.a. A._ SA (4A_573/2020) voudrait en revenir au jugement de première instance, soit faire condamner la défenderesse au paiement de 632'644 fr. 64, faire lever dans cette mesure l'opposition formée dans la poursuite en cours et obtenir confirmation du rejet de la demande reconventionnelle.
La société hôtelière a conclu à l'irrecevabilité du recours, subsidiairement à son rejet, tandis que l'autorité précédente s'est référée à son arrêt.
A._ SA a répliqué, suscitant une duplique de son adverse partie.
C.b. Quant à la société hôtelière Z._ SA (4A_575/2020), elle a requis le rejet de la demande principale et l'admission de sa demande reconventionnelle en paiement de 1'000'000 fr.
A._ SA a déposé une réponse concluant au rejet qui n'a suscité aucune observation de la recourante. La Cour de justice a derechef renvoyé à son arrêt.
Considérant en droit :
1.
Les deux recours ciblent le même arrêt, concernent le même complexe de faits et opposent les mêmes parties. Aussi l'économie de la procédure commande-t-elle de joindre les causes pour les traiter dans un seul arrêt (cf., mutatis mutandis, art. 24 PCF en lien avec l'art. 71 LTF; arrêt 4A_427/2019 du 28 janvier 2020 consid. 1).
2.
Les deux actes satisfont aux conditions de recevabilité du recours en matière civile, notamment en ce qui a trait à la valeur litigieuse minimale de 30'000 fr. (art. 74 al. 1 let. b LTF) et au délai de recours (art. 100 al. 1 LTF).
3.
3.1. 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 des constatations factuelles que si elles sont manifestement inexactes - c'est-à-dire arbitraires au sens de l'art. 9 Cst. - ou si elles découlent d'une violation du droit au sens de l'art. 95 LTF (art. 97 al. 1 et art. 105 al. 2 LTF).
Conformément au principe d'allégation (cf. consid. 3.2 infra), 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 (ATF 140 III 16 consid. 1.3.1 p. 18 et les références).
Concernant l'appréciation des preuves, le Tribunal fédéral n'intervient du chef de l'art. 9 Cst. que si le juge du fait n'a manifestement pas compris le sens et la portée d'un moyen de preuve, a omis sans raisons objectives de tenir compte des preuves pertinentes ou a effectué, sur la base des éléments recueillis, des déductions insoutenables (ATF 137 III 226 consid. 4.2 p. 234; 136 III 552 consid. 4.2). L'arbitraire ne résulte pas du seul fait qu'une autre solution serait concevable, voire préférable (ATF 144 III 145 consid. 2).
3.2. Le recours en matière civile peut être exercé pour violation du droit fédéral (art. 95 let. a LTF). L'autorité de céans applique le droit d'office. Elle n'examine d'ordinaire que les griefs invoqués, sauf en cas d'erreurs juridiques manifestes (ATF 140 III 115 consid. 2 p. 116). En outre, une exigence de motivation accrue prévaut pour la violation des droits constitutionnels tels que la prohibition de l'arbitraire: le principe d'allégation ancré à l'art. 106 al. 2 LTF impose au recourant d'indiquer quel droit constitutionnel a été violé en expliquant de façon circonstanciée en quoi consiste la violation (ATF 134 II 244 consid. 2.2; 133 II 396 consid. 3.2).
4.
4.1. Restent litigieuses à ce stade les questions relatives à la première échéance contractuelle (unique objet du recours de A._ SA), à l'existence d'un juste motif de résiliation et à l'obligation de payer l'indemnité forfaitaire pour résiliation anticipée (cibles du recours interjeté par Z._ SA).
Ces thématiques seront traitées dans l'ordre exposé ci-dessus.
4.2. Au préalable, il faut s'arrêter un bref instant sur la qualification du contrat "S2._".
L'autorité précédente a considéré que ce contrat informatique était un contrat mixte réunissant les traits d'un contrat de bail (vu la cession de l'usage d'un important matériel sujet à restitution, moyennant paiement d'un forfait mensuel), d'un contrat de licence (eu égard à la remise sous licence de logiciels spécifiques), d'un contrat d'entreprise (impliquant l'installation du système dans les locaux de la cliente) et, enfin, d'un contrat de maintenance sui generis (réglementant l'assistance à fournir durant toute la durée du contrat). Cette convention était un contrat de durée.
Il n'y a pas à discuter cette analyse qui n'a suscité aucune critique des deux parties, en particulier quant à l'élément-clé que représente l'aspect durable dudit contrat (sur la notion de contrat de durée, cf. ATF 128 III 428 consid. 3b p. 430; MARIE-NOËLLE VENTURI-ZEN-RUFFINEN, La résiliation pour justes motifs des contrats de durée, 2007, n. 25 ss. S'agissant du contrat mixte, cf. ATF 131 III 528 consid. 7.1.1; arrêts 4A_219/2020 du 12 mars 2021 consid. 3.1 et 3.2; 4C.84/2007 du 5 juillet 2007 consid. 3.1). Tout au plus soulignera-t-on que l'expression "contrat informatique" fait référence à la technologie sous-tendant ce type de convention et peut s'appliquer à des relations juridiques très variées (JACCARD/ROBERT, Les contrats informatiques, in La pratique contractuelle: actualité et perspectives, 2009, p. 97; cf. aussi arrêt 4C.332/1996 du 8 janvier 1998 consid. 2 et les réf. citées; ATF 124 III 456 consid. 4b/bb p. 459).
5.
5.1. Le premier élément litigieux tient à la date de la première échéance contractuelle.
Les parties ont conclu un contrat de durée indéterminée avec une durée minimale de 84 mois, soit 7 ans (let. A.b supra, notamment art. 12.2 CG; cf., mutatis mutandis, ATF 114 II 165 consid. 2b p. 166; arrêt 4C.303/1991 du 18 juin 1992 let. A et consid. 2).
La société hôtelière situe la première échéance contractuelle au 31 octobre 2017 tandis que A._ SA invoque la date du 31 mai 2018. La cause de cette divergence réside dans le dies a quo déterminant pour le délai de 84 mois: la société hôtelière veut se fonder sur la date du contrat (22 octobre 2010), solution retenue par l'autorité d'appel, tandis que A._ SA s'appuie sur la date d'acceptation du système (31 mai 2011), à l'instar du premier juge.
5.2. Procédant à l'interprétation subjective des manifestations de volonté (sur cette méthode d'interprétation, cf. par ex. ATF 144 III 93 consid. 5.2.1 et 5.2.2), la Cour de justice a conclu que la volonté réelle et concordante des parties était de retenir comme point de départ la date du contrat, soit le 22 octobre 2010.
Ce faisant, elle a opéré une constatation de fait dont il faut déterminer si elle résiste au grief d'arbitraire (ATF 144 précité consid. 5.2.2 i.f).
5.3. L'art. 12 des conditions générales - rédigées par A._ SA - traite de la durée et de la résiliation du contrat, comme l'annonce son intitulé. Selon la clause 12.1 CG, le contrat commence [ starts on] à la date du contrat, par quoi il faut comprendre le 22 octobre 2010, selon le "formulaire de commande". L'art. 12.2 CG enchaîne en précisant qu'à moins d'une résiliation anticipée, le contrat continuera [ will continue] au moins jusqu'au terme initial.
Ces deux règles consécutives dans un article consacré à la durée et à la résiliation du contrat, éclairées par la précision effectuée dans le formulaire de commande, conduisent logiquement à la conclusion tirée par la cour cantonale, à savoir que le terme initial de 84 mois/7 ans doit être compté à partir du 22 octobre 2010.
A._ SA tente vainement de minimiser l'importance du formulaire de commande en soutenant que ce document préimprimé tenant sur une page "a[ur]ait été établi dans un premier temps en vue de la signature du contrat" et que la précision concernant la date du contrat n'aurait eu d'autre but que de dater le formulaire lui-même. Rien de tel ne résulte de l'arrêt attaqué, si ce n'est la préséance que revêt ce document contractuel par rapport aux conditions générales.
Certes, le système S2._ n'a été installé qu'à la fin du mois de mai 2011, le certificat d'acceptation n'a été signé que le 9 juin 2011 et dans l'intervalle, la société hôtelière a continué d'employer l'ancien système S1._ en payant le forfait plus bas y afférent. Vrai est-il aussi que les parties ont signé un nouvel avenant le 1er juin 2011 fixant derechef la rémunération à 135 fr. par mois - après qu'elle eut été abaissée à 133 fr. 50 - et indiquant que la durée du contrat était de 84 mois.
Face à ces constatations, on objectera qu'en signant en octobre 2010 un nouveau contrat déterminant la première échéance d'après la date du document, les parties savaient que A._ SA ne pourrait pas fournir de suite le système S2._ qui devait encore être installé. Ce fait est admis par A._ SA, qui précise même avoir su que l'installation prendrait plusieurs mois. Il était en outre d'emblée convenu que la rémunération (supérieure) pour le système S2._ ne serait payable qu'à compter de l'acceptation de l'installation (cf. let. A.b supra, liste des prix et tarifs). Rien n'indique que les parties auraient sous-estimé le temps nécessaire à l'installation du nouveau système. Aussi ont-elles accepté en connaissance de cause que la date déterminante pour l'échéance contractuelle était le 22 octobre 2010.
Le précédent contrat "S1._" prévoyait certes une autre solution, soit une entrée en vigueur du contrat à la date d'acceptation du système, déterminante pour calculer la première échéance contractuelle (let. A.a supra). En signant une nouvelle convention le 29 octobre 2010, les parties avaient donc conscience de cette problématique et ont néanmoins convenu que le contrat débutait le 22 octobre 2010, en précisant que cette convention prévalait sur tout accord antérieur. On relèvera au passage que l'installation a nécessité nettement moins de temps que pour le premier système.
Quant à l'avenant du 1er juin 2011, la Cour de justice a précisé qu'il portait sur un ajout de matériel peu important au regard de l'ensemble des appareils électroniques fournis. Il indiquait certes une durée de 84 mois, mais n'effectuait aucune mention de la date du contrat et ne contenait aucune référence à une volonté de modifier les relations contractuelles des parties quant au calcul de l'indemnité. Aussi pouvait-on en inférer qu'il ne faisait que rappeler la durée initiale convenue, à l'instar du nombre de chambres. On ne discerne nulle once d'arbitraire dans cette appréciation.
A._ SA objecte encore que leur accord revêtirait essentiellement les traits d'un contrat de bail, lequel ne saurait déployer d'effet avant la prise de possession du matériel et le paiement de la rémunération forfaitaire. Elle intègre cet argument dans son raisonnement subsidiaire sur l'interprétation objective, à laquelle il n'y a pas lieu de recourir. Au demeurant, l'état de fait qui lie la cour de céans ne fournit pas une assise dont il faudrait nécessairement inférer que le centre de gravité des relations contractuelles était la location du matériel. La prénommée admet avoir commandé du matériel dès la signature du contrat en octobre 2010, ce qui tend à démontrer que la convention a déployé des effets avant juin 2011. Dans ce contexte, rien n'indique que les parties auraient enfreint une disposition impérative du droit des obligations.
En bref, la Cour de justice n'a pas versé dans l'arbitraire en constatant que selon la volonté réelle et commune des parties, le dies a quo déterminant pour calculer le terme initial était le 22 octobre 2010. Elle n'a pas méconnu les éléments mis en exergue par A._ SA mais en a fait une autre lecture. Or, l'arbitraire ne naît pas déjà du fait qu'une autre solution serait pareillement défendable, voire préférable.
5.4. Il sied ainsi de s'en tenir au constat que la première échéance contractuelle était le 31 octobre 2017, et non le 31 mai 2018 comme soutenu par A._ SA, dont le recours doit être rejeté.
En dénonçant le contrat pour le 31 juillet 2015, la société hôtelière a résilié le contrat avant terme, alors qu'il restait 27 mois (2 ans et 3 mois) jusqu'à l'échéance du 31 octobre 2017.
6.
Le deuxième objet de discorde porte sur la légitimité de la résiliation anticipée.
6.1. L'autorité précédente a jugé qu'au-delà des motifs de résiliation anticipée reconnus par l'art. 13.1 CG, chaque partie pouvait se prévaloir de justes motifs, conformément au principe général applicable aux contrats de durée (cf. ATF 138 III 304 consid. 7 p. 319; 128 III 428 consid. 3 p. 429; 122 III 262 consid. 2a/aa p. 265 s.; arrêt 4C.520/1996 du 17 juin 1997 consid. 6a; SCHMID ET ALII, OR BT, Schweizerisches Obligationenrecht Besonderer Teil, 3e éd. 2021, § 1 n. 121 et les auteurs cités; pour les contrats informatiques, JACCARD/ROBERT, op. cit., p. 118).
Cet élément n'est pas disputé.
En principe, l'existence d'un juste motif de résiliation dispense celui qui l'invoque d'indemniser son cocontractant pour le dommage subi, dans la mesure où il exerce un droit légitime; tel est en particulier le cas lorsque la résiliation est provoquée par une violation contractuelle commise par l'autre partie (VENTURI-ZEN-RUFFINEN, op. cit., n. 196 et 1483).
C'est le lieu de rappeler les préceptes relatifs à la résiliation anticipée pour justes motifs, puis de contrôler leur application dans le cas concret.
6.2. Une partie a un juste motif de mettre fin prématurément au contrat de durée lorsque, en raison d'un changement de circonstances, on ne peut raisonnablement plus exiger d'elle la poursuite des relations contractuelles jusqu'au prochain terme, non seulement d'un point de vue économique, mais aussi en regard d'autres aspects touchant notamment à la personnalité. N'importe quel événement peut en soi fonder un juste motif, qu'il soit inhérent à l'une ou l'autre partie ou extérieur à celles-ci. Des violations contractuelles spécialement graves légitiment habituellement une résiliation anticipée. Des violations moins graves peuvent aussi rendre inacceptable la poursuite du contrat lorsqu'elles se sont répétées nonobstant des avertissements ou sommations, de sorte qu'un nouvel avertissement paraît vain (ATF 138 III 304 consid. 7 p. 319; 128 III 428 consid. 3c i.f. p. 432; arrêts 4A_241/2017 du 31 août 2018 consid. 4.1; 4A_59/2017 du 28 juin 2017 consid. 4.1.1; VENTURI-ZEN-RUFFINEN, op. cit., n. 375-377).
Le juste motif est une notion juridique indéterminée qui relève de l'appréciation du juge. Celui-ci statue en équité (art. 4 CC), après avoir procédé à une pesée d'intérêts et apprécié toutes les circonstances du cas concret. Le Tribunal fédéral ne revoit qu'avec réserve une telle décision. Tout au plus sanctionnera-t-il une décision s'écartant sans raison des principes reconnus par la doctrine et la jurisprudence, s'appuyant sur des faits qui ne devraient jouer aucun rôle ou ignorant des éléments pertinents; tel doit aussi être le cas lorsque l'appréciation aboutit à un résultat manifestement injuste (ATF 128 III 428 consid. 4 p. 432; 136 III 278 consid. 2.2.1 p. 279; arrêts précités 4A_241/2017 consid. 4.1 et 4A_59/2017 consid. 4.1.2).
Dans la mesure où le principe de la fidélité contractuelle domine le droit des obligations, la résiliation anticipée d'un contrat de durée ne peut entrer en ligne de compte qu'exceptionnellement (arrêt 4C.121/2004 du 8 septembre 2004 consid. 3.2; arrêt précité 4C.520/1996 consid. 6a; VENTURI-ZEN-RUFFINEN, op. cit., n. 400 s.).
6.3. Dans la procédure judiciaire, la société hôtelière a tenté de justifier la résiliation anticipée par le fait qu'elle avait affronté 5'353 incidents techniques entre mars 2011 et mars 2015, 3 pannes majeures en 2013, 2014 et 2015, sans compter la délocalisation du système de support en Inde.
La Cour de justice a exclu l'existence de justes motifs en déployant une argumentation multifacette qui peut se résumer comme il suit:
- Les problèmes techniques n'excédaient pas ce qui peut être toléré dans l'exécution d'un contrat informatique de cette ampleur, quand bien même il concernait un hôtel de luxe. Leur gravité n'était pas démontrée. Aucun avertissement n'avait précédé la résiliation, et il n'apparaissait pas qu'une mise en garde eût été vaine.
- La continuation des rapports contractuels apparaissait possible. La société hôtelière avait toléré pendant plusieurs années les événements qu'elle qualifiait de manquements. Elle avait attendu trois mois après la panne majeure de janvier 2015 pour résilier le contrat avec effet au 31 juillet 2015. Elle n'invoquait aucune circonstance particulière justifiant une attente de six mois après la découverte des prétendus motifs de résiliation pour donner effet à celle-ci. Des événements durables et connus depuis plusieurs années ne pouvaient pas soudainement être transformés en justes motifs de résiliation. Certes, les parties avaient entrepris des négociations entre janvier et avril 2015 après que la société hôtelière eut demandé de nouvelles offres. Outre qu'on ignorait quels aspects de la relation contractuelle ces pourparlers étaient censés modifier, ils attestaient que la continuation des rapports n'était pas impossible moyennant certains arrangements. En tardant ainsi, la société hôtelière était forclose pour fonder une résiliation anticipée sur des motifs techniques.
- Le véritable motif de résiliation était d'ordre économique, la société hôtelière estimant qu'elle devait payer un prix trop élevé. En attestaient ses courriels du 18 décembre 2014 et du 26 juin 2014, lequel portait essentiellement sur des questions d'investissement. Les problèmes techniques existant depuis plusieurs années n'étaient qu'un prétexte pour mettre fin au contrat.
6.4. La société hôtelière réfute les constatations factuelles sur lesquelles l'autorité précédente a fondé son raisonnement. En particulier, celle-ci aurait retenu arbitrairement que le véritable motif de résiliation était d'ordre économique. Ce grief implique de traiter au préalable les critiques dénonçant une prétendue sous-estimation de la gravité et du nombre des problèmes techniques.
6.4.1. En préambule, on rappellera la jurisprudence selon laquelle l'état de fait de l'arrêt attaqué ne peut être complété que si la partie recourante désigne précisément les allégués et offres de preuves permettant de retenir les faits omis, avec référence aux pièces du dossier; à défaut, les faits invoqués sont réputés nouveaux, et partant irrecevables (art. 99 al. 1 LTF; ATF 140 III 86 consid. 2 p. 90; plus récemment, cf. par ex. arrêt 4A_208/2021 du 16 juillet 2021 consid. 2.2 i.f.; sous l'OJ déjà, ATF 115 II 484 consid. 2a p. 486; 111 II 471 consid. 1c). Or, à réitérées reprises, la société hôtelière renvoie à ses écritures d'appel citant des pièces sans les relier à des allégués introduits en première instance. Elle ne prétend pas non plus pouvoir bénéficier de l'art. 317 al. 1 CPC. Il s'ensuit qu'on ne saurait tenir compte de moyens de preuve non rattachés à des allégués régulièrement introduits en première instance.
6.4.2. La société hôtelière reproche à la Cour de justice d'avoir minimisé les problèmes techniques rencontrés en considérant qu'ils n'excédaient pas ce qui devait être accepté dans le cadre d'un contrat de cette ampleur; la cour aurait en particulier sous-estimé le tableau recensant 5'353 problèmes techniques en quatre ans.
Ledit tableau contient une colonne intitulée "problème rencontré" qui a été systématiquement remplie. Mais il faut bien admettre que les mentions apportées sont peu parlantes, dans la mesure où il est très souvent fait état de "TV" ou "chaînes TV". Il est aussi régulièrement mentionné que l'"Internet [...] ne fonctionne pas" ou, moins souvent, que la "TV [n'a] pas de chaînes" ou "pas de menu A._".
La rubrique "commentaire", censée détailler la nature du problème, n'a de loin pas toujours été remplie. Lorsque tel est le cas, différents problèmes techniques sont certes évoqués, mais on peut aussi parfois y lire que "tout est ok", que l'antenne ou un câble était débranché, qu'il y a un problème de satellite, que le client a demandé des explications sur le fonctionnement du système, sur le système "Pay TV" ou sur le bouquet de chaînes, qu'il s'est trompé de prise, ne sait pas quelle télécommande choisir, a utilisé la mauvaise télécommande, ou encore que la télécommande connaît un problème de pile. Sont aussi répertoriés des incidents plus incongrus, tel celui du "prince du 5e " mécontent car les autres ont un grand écran et pas lui, ou du client alcoolisé qui ne sait plus comment éteindre sa TV!
Tout ceci atteste que les 5'353 incidents recensés ne sont pas tous des dysfonctionnements imputables à A._ SA - tant s'en faut. La société hôtelière ne s'est pas attelée à recenser tous les cas de réels problèmes techniques en désignant les numéros d'incidents, et telle n'est pas la tâche du Tribunal fédéral. A tout le moins une lecture du tableau dans les grandes lignes n'insuffle-t-elle pas un sentiment d'arbitraire quant au constat selon lequel les incidents techniques rencontrés n'excédaient pas ce qui est tolérable dans l'exécution d'un contrat de ce genre. Qui plus est, il n'est pas contesté que A._ SA n'a délivré que 388 tickets de maintenance dont 110 concernaient la même chambre. Tout au plus est-il soutenu que la prénommée est parvenue à grouper ses interventions.
La société hôtelière plaide en outre que la plupart des problèmes techniques rencontrés touchaient l'intégralité du système et se répercutaient dans toutes les chambres.
Un allégué a bel et bien été introduit en ce sens (all. 57 de la réponse), mais les moyens de preuve proposés à l'appui de celui-ci ne sont pas probants. Le tableau des incidents semble plutôt attester du contraire et n'établit en tout cas pas cet allégué, et la défenderesse n'apporte aucune démonstration à son affirmation. Quant au courriel du 26 juin 2014, mentionné dans l'arrêt attaqué, il évoque deux pannes majeures concernant tous les systèmes S2._ de l'hôtel les 28 et 29 novembre 2013, puis les 7 et 8 mai 2014. Il semble à cet égard que l'arrêt attaqué ait situé par inadvertance la deuxième panne en novembre 2014 plutôt qu'en mai 2014, ce qui n'a pas d'incidence puisqu'il est acquis qu'il y a eu trois pannes généralisées dont deux antérieures au courriel du 18 décembre 2014. Enfin, le courriel du 8 juillet 2014 indique tout au plus qu'à une occasion, plusieurs chambres de l'hôtel n'avaient plus accès à la location de films et qu'une telle situation n'était pas acceptable pour un hôtel de ce type; il n'établit manifestement pas la thèse d'un dysfonctionnement général. Quant aux déclarations d'un administrateur chargé de la gestion de l'hôtel, qui sont évoquées dans le premier jugement, l'autorité précédente pouvait sans arbitraire s'en détacher, vu le lien entretenu par cette personne avec la société hôtelière et l'absence d'éléments corroborant précisément ses propos. On s'en tiendra donc au fait qu'à trois reprises, le système a connu une panne généralisée.
La société hôtelière plaide aussi que ses revenus "Pay TV" ont chuté entre janvier 2012 et 2015. Cet argument peut être contré d'une part par le fait que les pièces censées établir les baisses sont de simples tableaux apparemment dressés par l'intéressée, ce qui peut autoriser à leur dénier une valeur probante sans verser dans l'arbitraire. D'autre part, il s'agirait encore d'établir la cause de ces baisses de revenus en les liant à des problèmes techniques répétés, ce qui n'a pas été fait, l'intéressée se contentant d'invoquer un fait d'expérience tout en dénonçant le caractère dépassé du système et un changement de comportement des clients.
Quant à l'argument de la chute des nuitées, il prête à sourire, tant il est vrai que le choix d'un hôtel n'apparaît pas dicté par son système de divertissement. Là aussi, la société hôtelière se retranche maladroitement derrière "le fait d'expérience".
Il faut encore relever qu'on ne trouve d'autres traces de plaintes relatives aux dysfonctionnements techniques que dans les correspondances des 26 juin 2014, 10 avril 2015 (courrier de résiliation) et 16 juin 2015 (postérieur à la résiliation), évoquées dans l'arrêt attaqué, ainsi que dans le courriel précité du 8 juillet 2014 concernant le problème d'accès à la location de films. La société hôtelière s'est en outre plainte de la panne de janvier 2015, ce qui ressort en filigrane de l'arrêt attaqué lorsqu'il évoque le courriel rédigé par A._ SA le 21 janvier 2015 et les négociations entamées à cette époque.
L'on pointera aussi le fait que dans la première menace de résiliation brandie le 18 décembre 2014, la société hôtelière n'a invoqué aucun problème technique.
Il s'ensuit qu'en relativisant les problèmes techniques, en particulier par rapport au tableau recensant 5'353 incidents, la Cour de justice n'a pas sombré dans l'arbitraire. Il n'était pas insoutenable de considérer que les problèmes n'excédaient pas ce qui est tolérable dans l'exécution d'un contrat de cette ampleur, y compris s'agissant d'un hôtel de luxe.
6.4.3. La société hôtelière conteste que le véritable motif de résiliation soit d'ordre économique. Les avertissements antérieurs à la résiliation attesteraient du rôle joué par les problèmes techniques.
Il est constant que A._ SA a délocalisé le service de maintenance en Inde, et l'on conçoit qu'une telle solution ait pu déplaire à sa cocontractante et lui occasionner des désagréments, ne serait-ce qu'en raison du décalage horaire. Il est aussi avéré que des problèmes techniques ont affecté le bon fonctionnement du système, sans toutefois qu'on puisse en inférer qu'ils excédaient le seuil de tolérance.
De facto, l'intéressée s'est plainte de la délocalisation du service de maintenance, a dénoncé deux pannes majeures et a déploré à une occasion l'impossibilité d'accéder au système de location de films dans plusieurs chambres (courriels des 26 juin et 8 juillet 2014). Elle a également réagi après la panne de janvier 2015.
Il n'en demeure pas moins que la société hôtelière a aussi fustigé le matériel jugé dépassé et trop coûteux en exigeant des informations financières sur les investissements effectués par A._ SA (courriel du 26 juin 2014), puis en menaçant de résilier le contrat en décembre 2014 - soit avant la troisième panne majeure consécutive à une mise à jour effectuée de façon inopportune -, en arguant uniquement de l'évolution de la technologie et du changement d'habitudes des clients qui avaient rendu le système S2._ dépassé et moins profitable. Dans un courrier consécutif à la résiliation (16 juin 2015), elle a certes invoqué des désagréments et pertes financières causées par les dysfonctionnements du système, mais aussi la disproportion entre le prix payé et la qualité du service offert.
Inférer, dans ces circonstances, que le motif principal de résiliation du contrat était d'ordre économique ne constituait pas un arbitraire, en particulier à la lumière du courriel du 18 décembre 2014. Sans doute faut-il concéder que d'autres motifs sous-tendaient aussi cette décision. La Cour de justice a toutefois jugé que les problèmes techniques n'avaient pas joué un rôle déterminant. Ce qui revient à dire que le contrat aurait été résilié indépendamment desdits problèmes. Pareille appréciation se révèle exempte d'arbitraire, vu les déclarations de l'intéressée dans le courriel précité, étant entendu que les problèmes techniques étaient connus depuis longtemps et que deux pannes majeures s'étaient déjà produites.
Quand bien même une autre conclusion eût été possible, il faut bien admettre qu'elle n'était pas insoutenable. Le fait que A._ SA ait écrit avoir perdu la confiance de sa partenaire après la troisième panne de janvier 2015 ne suffit pas à modifier cette analyse, l'autorité cantonale ayant souligné à bon escient que les relations avaient encore perduré six mois et que des négociations avaient été entreprises.
6.5. Après avoir constaté sans arbitraire que le motif principal de résiliation était d'ordre économique, la Cour de justice pouvait conclure en conformité avec le droit fédéral qu'il ne s'agissait pas d'un juste motif de résiliation.
On rappellera qu'un tel cas de figure ne peut être retenu qu'exceptionnellement et que l'autorité de céans ne revoit qu'avec réserve une décision d'appréciation prise en équité (consid. 6.2 supra). A._ SA n'avait pas à répondre du changement d'habitudes de la clientèle; en outre, la nécessité de conclure un contrat d'une durée suffisante pour permettre d'amortir les investissements effectués, qui était indéniable et acceptée par la partenaire contractuelle, pouvait comporter un risque d'obsolescence quant à l'équipement fourni.
6.6. En bref, l'autorité précédente n'a pas enfreint le droit fédéral en déniant dans ce cas précis l'existence d'un juste motif de résiliation anticipée.
Ce constat prive d'objet les autres griefs émis par la société hôtelière.
7.
Le dernier point disputé a trait à la question de savoir si la société hôtelière était tenue de payer l'indemnité forfaitaire contractuelle pour résiliation anticipée. Celle-ci conteste une telle obligation en s'appuyant sur l'art. 14.1.3 CG dont elle relève qu'il prévoit uniquement deux cas de figure qui ne sont pas réalisés.
7.1. A titre liminaire, on relèvera que la Cour de justice a exclu l'application de l'art. 404 al. 2 CO ou de l'art. 264 CO qui eussent pu s'opposer à l'octroi d'une indemnité forfaitaire destinée à remplacer le gain manqué subi par la partie "victime" de la résiliation anticipée (concernant l'art. 404 CO, cf. cependant arrêt 4A_129/2017 du 11 juin 2018 consid. 7.1 § 3). Cette analyse n'appelle aucun commentaire dès lors qu'elle n'est pas contestée.
7.2. Les clauses topiques sont les suivantes:
- Selon la liste des prix et tarifs, l'indemnité pour résiliation anticipée se détermine selon la formule "nombre de chambres x 113 fr. 52 x nombre de mois restants jusqu'au terme initial".
- L'art. 13 CG traite de la résiliation anticipée et de la suspension. Il reconnaît à chaque partie un droit de résiliation anticipée dans deux cas de figure (art. 13.1 CG). Il est cependant admis que l'une et l'autre partie bénéficient plus largement d'un droit de résiliation pour justes motifs (consid. 6.1 supra).
- L'art. 14 CG, consacré aux "conséquences de la résiliation", précise que la société hôtelière devra payer l'indemnité de résiliation anticipée si A._ SA a résilié le contrat en vertu de l'art. 8.2.1 ou 13.1, c'est-à-dire si la société hôtelière a violé la clause d'exclusivité, était en demeure dans le paiement d'une dette ou a commis une violation substantielle du contrat.
7.3. Procédant à une interprétation subjective des manifestations de volonté, l'autorité précédente a constaté que les parties n'avaient pas voulu dresser à l'art. 14 CG un catalogue exhaustif des situations obligeant la société hôtelière à payer l'indemnité forfaitaire pour résiliation immédiate. Tout au plus cette disposition recensait-elle les cas particuliers dans lesquels cette cocontractante devait payer l'indemnité lorsque la résiliation émanait de A._ SA.
A l'appui de cette appréciation des preuves, la Cour de justice a invoqué les arguments suivants:
- La liste des prix et tarifs prévalait sur les conditions générales; or, elle posait le principe d'une indemnité forfaitaire pour résiliation anticipée dont elle énonçait le mode de calcul sans préciser les cas dans lesquels elle était due, et partant sans limiter expressément son paiement aux cas listés à l'art. 14.1.3 CG.
- En principe, l'indemnité était due par la partie résiliant le contrat sans droit, i.e sans justes motifs. On concevait mal que la société hôtelière puisse être dispensée de payer l'indemnité forfaitaire censée compenser la perte sur investissement de A._ SA lorsqu'elle-même résiliait le contrat sans justes motifs, et qu'elle doive en revanche la payer lorsqu'elle avait poussé l'autre partie à résilier le contrat.
- Le comportement subséquent de la société hôtelière confortait cette interprétation. Jusqu'au stade de la duplique de première instance, elle n'avait jamais remis en cause le principe du versement d'une indemnité pour résiliation anticipée, qu'elle avait du reste partiellement payée.
7.4. Force est d'admettre que cette interprétation subjective échappe au grief d'arbitraire. Même si l'art. 14 CG, selon son intitulé, traite des conséquences de la résiliation, on peut en inférer sans arbitraire qu'il n'énonce pas tous les cas de figure envisageables. Revêt un poids certain l'argument selon lequel il serait incohérent que la société hôtelière doive payer l'indemnité forfaitaire - compensant partiellement la perte sur investissement - lorsqu'elle a fourni à l'autre partie un juste motif de résiliation, mais non dans l'hypothèse où elle-même résilie sans motif justifié.
En outre, l'autorité précédente a souligné avec pertinence qu'à défaut d'indemnité conventionnelle, la société hôtelière devrait dédommager l'autre partie pour l'intérêt positif à l'exécution du contrat jusqu'au terme ordinaire (ce que reconnaît du reste l'intéressée), moins les montants que cette partie a pu épargner ou gagner du fait de la cessation prématurée des rapports contractuels (cf. VENTURI-ZEN-RUFFINEN, op. cit., n. 1503 ss). Or, l'indemnité forfaitaire (basée sur un tarif de 113 fr. 52 par chambre) est inférieure à la redevance mensuelle prévue (135 fr. par chambre), et on ignore le montant précis qui a pu être épargné ou gagné du fait de la résiliation.
La société hôtelière brandit à cet égard l'art. 11.2 CG, qui serait censé exclure sa responsabilité contractuelle dans ce cas de figure. Cette clause ne figure pas dans les décisions cantonales et l'intéressée ne soutient pas que l'état de fait devrait être complété, ni ne cite l'allégué qui permettrait d'introduire une telle constatation. Pour ce motif déjà, son argument se révèle inopérant.
A cela s'ajoute que la société hôtelière a attendu la duplique pour contester le principe de l'indemnité forfaitaire alors qu'elle était assistée d'un avocat. L'interprétation subjective autorise bel et bien la prise en compte de comportements postérieurs (ATF 144 III 93 consid. 5.2.2), et l'autorité précédente pouvait écarter sans arbitraire la thèse d'une erreur. La société hôtelière ne conteste en effet pas l'affirmation de A._ SA selon laquelle elle était assistée d'un avocat/administrateur au moment du paiement. Celui-ci, lors de son audition, a certes déclaré avoir été sous l'emprise d'une erreur, mais la cour cantonale pouvait sans arbitraire se détacher d'une telle affirmation. De toute façon, la même conclusion pourrait être tirée indépendamment de l'attitude ultérieure de l'intéressée.
Enfin, peu importe que les parties aient réservé la forme écrite et convenu que l'accord écrit contenait l'intégralité de ce qu'elles avaient convenu. La société hôtelière prête aux clauses 17.5 et 17.6 CG une portée qu'elles n'ont pas; elle n'a du reste pas contesté son droit à résilier le contrat pour justes motifs dans d'autres hypothèses que celles énoncées à l'art. 13.1 CG, ce qui montre bien que l'accord n'était pas exhaustif.
La société hôtelière tente simplement de faire prévaloir sa propre version sur celle de la Cour de justice sans qu'on puisse reprocher à cette autorité d'avoir interprété les déclarations et comportements de façon arbitraire.
7.5. En bref, l'autorité précédente n'a pas enfreint le droit fédéral en considérant que la résiliation anticipée sans juste motif entraînait l'obligation de payer l'indemnité forfaitaire prévue par le contrat.
Ce constat prive d'objet les autres arguments déployés par la société hôtelière.
7.6. La Cour de justice a retenu à juste titre qu'il restait 27 mois jusqu'à la première échéance du contrat (cf. consid. 5.4 supra). Elle a calculé que l'indemnité pour résiliation anticipée s'élevait à 1'296'511 fr. 92, soit 423 (chambres) x 113.52 (CHF) x 27 (mois restants), dont à déduire 1'000'000 fr. déjà payés.
Il n'y a pas matière à critiquer ce calcul. La société hôtelière prétend vainement au remboursement de la somme déjà versée en s'appuyant sur l'art. 63 al. 1 CO. Cette disposition présuppose l'absence de cause valable au transfert de fonds; or, l'intéressée adopte la prémisse erronée que la somme versée n'était pas due.
8.
En définitive, les deux recours doivent être rejetés.
Chaque partie supportera les frais et dépens afférents à son propre recours (art. 66 al. 1 et art. 68 al. 1 et 2 LTF).
Les frais du recours interjeté par A._ SA (4A_573/2020) sont fixés à 6'500 fr., et les dépens dus à l'adverse partie à 7'500 fr.
Dans le recours formé par la société Z._ SA (4A_575/2020), les frais judiciaires ascendent à 15'000 fr. et les dépens à 17'000 fr.
Il s'ensuit qu'après compensation, Z._ SA reste devoir à A._ SA une indemnité de 9'500 fr. à titre de dépens (17'000 fr. - 7'500 fr.).
Par ces motifs, le Tribunal fédéral prononce :
1.
Les causes 4A_573/2020 et 4A_575/2020 sont jointes.
2.
Les deux recours sont rejetés.
3.
Les frais judiciaires résultant des deux procédures jointes sont arrêtés à 21'500 fr. et mis à la charge de A._ SA par 6'500 fr. et à celle de Z._ SA par 15'000 fr.
4.
Z._ SA versera à son adverse partie une indemnité de 9'500 fr. à titre de dépens réduits.
5.
Le présent arrêt est communiqué aux parties et à la Cour de justice du canton de Genève.
Lausanne, le 11 octobre 2021
Au nom de la Ire Cour de droit civil
du Tribunal fédéral suisse
La Présidente : Hohl
La Greffière : Monti