Faits :
A.
En 2005, A._, ingénieur civil de formation, a commencé à développer des activités immobilières par le biais de X._ SA (ci-après: X._), dont il a été l'administrateur unique jusqu'au 25 juin 2010. Selon les déclarations de A._, cette société exerce une activité de direction des travaux dans le cadre de la construction de maisons ou de travaux de rénovation; elle s'occupe de la coordination et de la surveillance des travaux qu'elle fait intégralement exécuter par des sous-traitants, dans la mesure où elle n'emploie elle-même aucun ouvrier.
A._ s'est adressé à Z._ SA (ci-après: Z._ ou l'assureur) afin d'être couvert pour ces activités.
Le 30 novembre 2005, le contrat d'assurance responsabilité civile professionnelle n° xxx a été conclu avec Z._. Le preneur d'assurance est « X._ et A._ SA»et le risque assuré est décrit comme suit:
"Bureau civil d'ingénieur
Extensions de couverture du groupe A
Dommages et défauts aux ouvrages et/ou installations ainsi que préjudices pécuniaires [...]".
Le contrat renvoie aux conditions générales - Assurance responsabilité civile professionnelle pour architectes et ingénieurs, édition 01.2005 (ci-après: CGA). Sous l'intitulé «Extensions de couverture/risques supplémentaires soumis à surprime», l'article 3 CGA comprend les termes suivants:
"Uniquement si la police contient une disposition expresse, l'assurance s'étend également aux extensions de couverture/risques supplémentaires non mentionnés à l'art. 1c des CG, notamment aux dommages et défauts aux ouvrages/préjudices pécuniaires.
a) Objet de l'assurance
1. Dommages et défauts aux ouvrages
L'assurance s'étend également aux prétentions découlant de dommages et défauts:
- aux ouvrages qui sont réalisés sur la base des travaux de planification des assurés ou sous leur direction;
- [...]."
Pour sa part, l'article 1 CGA, relatif à l'objet de l'assurance, comporte une lettre b à la teneur suivante:
"L'assurance comprend aussi, sans convention spéciale, la responsabilité civile:
[...]
7. du preneur d'assurance en qualité d'entrepreneur général ou d'entrepreneur total.
Dans la mesure où une couverture d'assurance a été conclue pour les dommages et les défauts aux ouvrages selon l'article 3 des CG, cette couverture se limite aux dommages qui sont imputables aux travaux de planification des assurés.
Le preneur d'assurance est considéré comme
- entrepreneur général lorsqu'un maître de l'ouvrage lui confie, sur la base d'un projet existant, l'exécution complète d'un ouvrage ou d'une partie d'ouvrage;
- entrepreneur total lorsqu'un maître de l'ouvrage lui confie en même temps l'exécution complète des plans et d'un ouvrage ou d'une partie d'ouvrage.
La couverture d'assurance en tant qu'entrepreneur général ou entrepreneur total est subordonnée au fait que le preneur d'assurance conclut en son propre nom et pour son propre compte les contrats relatifs aux travaux qu'il fait exécuter par des tiers (architectes, ingénieurs, entrepreneurs, artisans, etc.).
Toutefois, il n'existe aucune couverture d'assurance pour les dommages et défauts assurés selon l'article 3 CG dans la mesure où ces dommages et défauts sont imputables à des activités liées à la direction des travaux."
A._ a déclaré ne pas avoir lu les CGA à l'époque de la conclusion du contrat.
Au début 2008, X._ - sous la dénomination « X._ SA Entreprise générale» - s'est engagée à édifier les habitations décrites dans une autorisation de construire délivrée en août 2007, en concluant des contrats de construction avec chacun des acquéreurs d'une promotion immobilière de neuf habitations contiguës, à.... Elle a confié les travaux d'étanchéité de ce chantier à l'entreprise M._. Dès 2010, en raison d'une mauvaise exécution de son travail par cette entreprise, des infiltrations d'eau, des taches d'humidité et de la moisissure sont progressivement apparues dans toutes les maisons. Après s'être adressée à M._ - laquelle a minimisé le problème -, X._ s'est tournée vers la société N._ SA, qui a procédé aux travaux de réfection. Elle a ensuite tenté de faire intervenir l'assureur responsabilité civile de M._, en vain, puisque l'assurance en cause était alors suspendue en raison du défaut de paiement des primes. La faillite de M._ a été prononcée le 4 septembre 2007.
En juillet 2012, A._ a rempli une déclaration de sinistre auprès de Z._, en indiquant la référence d'une police établie en janvier 2008 en vue de la promotion immobilière précitée, laquelle regroupait à la fois une assurance travaux de construction et une assurance responsabilité civile du maître de l'ouvrage. L'assureur a refusé toute prise en charge, car, d'une part, les dégâts d'eau avaient pour origine des malfaçons dans l'exécution de la toiture par l'entreprise chargée de ces travaux, sans qu'aucun accident de construction n'apparaisse et, d'autre part, la police précitée avait pris fin le 2 juillet 2009.
En juillet 2013, X._ a invité Z._ à examiner la prise en charge du sinistre sur la base de la police d'assurance responsabilité civile du 30 novembre 2005. L'assureur n'est pas entré en matière, dès lors que le responsable du sinistre était l'exécutant, et non le preneur d'assurance. X._ est revenue à la charge, en se référant notamment à l'extension de l'assurance responsabilité civile. En février 2014, Z._ a maintenu son refus de couvrir le sinistre, au motif que la responsabilité de X._ n'était pas engagée au titre de direction des travaux.
B.
Le 19 décembre 2014, X._ a saisi le Tribunal de première instance du canton de Genève d'une requête de conciliation puis, devant l'échec de celle-ci, d'une demande tendant à ce que Z._ soit condamnée à lui payer la somme de 108'179 fr.80 avec intérêts.
Par jugement du 22 juin 2016, le tribunal a débouté X._ de ses conclusions.
Statuant le 10 février 2017 sur appel de X._, la Chambre civile de la Cour de justice du canton de Genève a confirmé le jugement de première instance. En substance, elle a considéré que les CGA excluaient la couverture des activités de l'architecte ou de l'ingénieur liées à la direction des travaux dans les cas où il intervenait en qualité d'entrepreneur général ou total. Dans la mesure où il ne ressortait pas de la procédure que le défaut d'étanchéité serait imputable aux travaux de planification - seule activité couverte par la police d'assurance dans ce cas de figure -, le sinistre n'était pas couvert.
C.
X._ interjette un recours en matière civile, concluant principalement à l'annulation de l'arrêt précité et à la condamnation de Z._ au paiement de la somme de 108'179 fr.80 avec intérêts à 5% dès le 1 er juillet 2014.
Z._ n'a pas été invitée à se déterminer.
Considérant en droit :
1.
Les conditions de recevabilité du recours en matière civile sont réalisées sur le principe, notamment sous l'angle de la valeur litigieuse minimale de 30'000 fr. (art. 74 al. 1 let. b LTF) et du délai pour recourir (art. 100 al. 1 LTF en lien avec l'art. 45 al. 1 LTF). Demeure réservé l'examen des griefs particuliers.
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 (ATF 136 I 241 consid. 2.1 p. 247; 136 II 304 consid. 2.4 p. 313). Le Tribunal fédéral applique le droit d'office (art. 106 al. 1 LTF). 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 il peut rejeter un recours en adoptant une argumentation différente de celle de l'autorité précédente (ATF 137 II 313 consid. 1.4; 135 III 397 consid. 1.4 p. 400). Compte tenu de l'exigence de motivation contenue à 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 (ATF 141 III 86 consid. 2; 140 III 115 consid. 2; 137 III 580 consid. 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 140 III 115 consid. 2 p. 117; 135 III 397 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'allégation énoncé par l'art. 106 al. 2 LTF (ATF 140 III 264 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 (ATF 140 III 16 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 (ATF 140 III 86 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 (ATF 140 III 16 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).
3.
Les parties ont conclu un contrat d'assurance, régi par la LCA (RS 221.229.1). Les conditions générales incorporées à ce contrat prévoient notamment que l'intimée couvrira les prétentions contre l'assuré découlant de dommages et défauts aux ouvrages qui sont réalisés "sur la base de travaux de planification des assurés ou sous leur direction" (article 3 let. a ch. 1 CGA). Il ressort des constatations de la cour cantonale que la recourante - qui est intervenue comme entrepreneur général vis-à-vis des acquéreurs de la promotion immobilière de... - a dû assumer les coûts de réfection des malfaçons dont l'entreprise qu'elle avait chargée de l'exécution des travaux d'étanchéité s'est rendue responsable. Si seul l'article 3 let. a ch. 1 CGA déterminait la couverture d'assurance, le risque assuré serait réalisé dans la mesure où la recourante a assumé la direction des travaux en question, ce qui entraînerait en principe l'obligation pour l'intimée de payer la prestation d'assurance. L'autorité cantonale a toutefois débouté la recourante, considérant que l'on se trouvait dans le cas d'exclusion prévu à l'article 1 let. b ch. 7 CGA.
Le litige porte sur l'interprétation de cette clause.
4.
Selon la jurisprudence, les dispositions d'un contrat d'assurance, de même que les conditions générales qui y ont été expressément incorporées, doivent être interprétées selon les principes qui gouvernent l'interprétation des contrats (ATF 135 III 410 consid. 3.2 p. 412).
4.1. En présence d'un litige sur l'interprétation d'une clause contractuelle, le juge doit tout d'abord s'efforcer de rechercher la réelle et commune intention des parties, sans s'arrêter aux expressions ou dénominations inexactes dont elles ont pu se servir, soit par erreur, soit pour déguiser la nature véritable de la convention (art. 18 al. 1 CO). Constituent des indices en ce sens non seulement la teneur des déclarations de volonté - écrites ou orales -, mais aussi le contexte général, soit toutes les circonstances permettant de découvrir la volonté des parties, qu'il s'agisse de déclarations antérieures à la conclusion du contrat, des projets de contrat, de la correspondance échangée ou encore de l'attitude des parties après la conclusion du contrat, établissant quelles étaient à l'époque les conceptions des contractants eux-mêmes (ATF 140 III 86 consid. 4.1; 125 III 263 consid. 4c; 118 II 365 consid. 1; arrêts 4A_200/2015 du 3 septembre 2015 consid. 4.1.1; 4A_65/2012 du 21 mai 2012 consid. 10.2). La recherche de la volonté réelle des parties est qualifiée d'interprétation subjective (ATF 131 III 606 consid. 4.1 p. 611; 125 III 305 consid. 2b p. 308). Déterminer ce qu'un cocontractant savait et voulait au moment de conclure relève des constatations de fait qui lient le Tribunal fédéral conformément à l'art. 105 LTF (ATF 132 III 268 consid. 2.3.2; 131 III 606 consid. 4.1 p. 611; 128 III 419 consid. 2.2 p. 422).
Si le juge ne parvient pas à déterminer la volonté réelle et commune des parties - parce que les preuves font défaut ou ne sont pas concluantes - ou s'il constate qu'une partie n'a pas compris la volonté exprimée par l'autre à l'époque de la conclusion du contrat (ATF 131 III 280 consid. 3.1 p. 286) - ce qui ne ressort pas déjà du simple fait qu'elle l'affirme en procédure, mais doit résulter de l'administration des preuves (arrêts 5C.252/2004 du 30 mai 2005 consid. 4.3; 4A_210/2015 du 2 octobre 2015 consid. 6.2.1) -, il doit recourir à l'interprétation normative (ou objective), à savoir rechercher leur volonté objective, en déterminant le sens que, d'après les règles de la bonne foi, chacune d'elles pouvait et devait raisonnablement prêter aux déclarations de volonté de l'autre (application du principe de la confiance; ATF 135 III 140 consid. 3.2; 133 III 61 consid. 2.2.1; 132 III 268 consid. 2.3.2 p. 274/275, 626 consid. 3.1 p. 632). Ce principe permet d'imputer à une partie le sens objectif de sa déclaration ou de son comportement, même si celui-ci ne correspond pas à sa volonté intime (ATF 130 III 417 consid. 3.2 p. 424 et les arrêts cités).
A cet égard, le juge part en premier lieu de la lettre du contrat. En principe, les expressions et termes choisis par les cocontractants doivent être compris dans leur sens objectif (ATF 131 III 606 consid. 4.2 p. 611). Toutefois, il ressort de l'art. 18 al. 1 CO que le sens d'un texte, même clair, n'est pas forcément déterminant. Même si la teneur d'une clause contractuelle paraît limpide à première vue, il peut résulter d'autres circonstances que le texte de la clause litigieuse ne restitue pas exactement le sens de l'accord conclu (ATF 136 III 86 consid. 3.2.1 p. 188). Ainsi, cette interprétation s'effectue non seulement d'après le texte et le contexte des déclarations, mais également sur le vu des circonstances qui les ont précédées et accompagnées (ATF 135 III 295 consid. 5.2 p. 302; 132 III 626 consid. 3.1. in fine; 131 III 377 consid. 4.2.1), à l'exclusion des circonstances postérieures (ATF 135 III 295 consid. 5.2 p. 302; 133 III 61 consid. 2.2.1 p. 67; 132 III 626 consid. 3.1). Cela étant, il n'y a pas lieu de s'écarter du sens littéral du texte adopté par les cocontractants lorsqu'il n'existe aucune raison sérieuse de penser qu'il ne correspond pas à leur volonté (ATF 136 III 186 consid. 3.2.1). L'application du principe de la confiance est une question de droit que le Tribunal fédéral peut examiner d'office (art. 106 al. 1 LTF); cependant, pour trancher cette question, il doit se fonder sur le contenu des manifestations de volonté et sur les circonstances, dont la constatation relève du fait (ATF 135 III 410 consid. 3.2).
Lorsqu'il présente des conditions générales au moment de conclure, l'assureur manifeste la volonté de s'engager selon la teneur de ces conditions. Si une volonté réelle et commune des parties contractantes n'a pas été constatée, comme c'est le cas en l'espèce, il convient de vérifier comment les destinataires de ces déclarations de volonté pouvaient les comprendre de bonne foi, en recourant à l'interprétation objective des termes figurant dans les conditions générales (ATF 135 III 410 consid. 3.2 p. 413 et l'arrêt cité).
4.2. Si l'interprétation selon le principe de la confiance ne permet pas de dégager le sens de clauses ambiguës, celles-ci sont à interpréter contre l'assureur qui les a rédigées, en vertu de la règle " in dubio contra assicuratorem " (ATF 133 III 61 consid. 2.2.2.3 p. 69; 126 V 499 consid. 3b; 124 III 155 consid. 1b p. 158; 122 III 118 consid. 2a p. 121; 119 II 368 consid. 4b p. 373). L'art. 33 LCA, en tant qu'il prévoit que les clauses d'exclusion sont opposables à l'assuré uniquement si elles sont rédigées de façon précise et non équivoque, en est une concrétisation (ATF 115 II 264 consid. 5a p. 269; arrêt 5C.134/2002 du 17 septembre 2002 consid. 3.1). Ainsi, quand l'assureur entend apporter des restrictions ou des exceptions, il lui appartient de le dire clairement (ATF 133 III 675 consid. 3.3 p. 682). Conformément au principe de la confiance, c'est à l'assureur qu'il incombe de délimiter la portée de l'engagement qu'il entend prendre et le preneur n'a pas à supposer des restrictions qui ne lui ont pas été clairement présentées (ATF 133 III 675 consid. 3.3 p. 682; sous une forme résumée: ATF 135 III 410 consid. 3.2 p. 413). Pour que cette règle trouve à s'appliquer, il ne suffit pas que les parties soient en litige sur la signification à donner à une déclaration; encore faut-il que celle-ci puisse de bonne foi être comprise de différentes façons (" zweideutig ") et qu'il soit impossible de lever autrement le doute créé, faute d'autres moyens d'interprétation (ATF 122 III 118 consid. 2d; 118 II 342 consid. 1a p. 344; 100 II 144 consid. 4c p. 153).
4.3. Par ailleurs, la validité des conditions générales préformulées est limitée par la règle de la clause insolite. Sont ainsi soustraites de l'adhésion censée donnée globalement à des conditions générales toutes les clauses insolites sur lesquelles l'attention de la partie la plus faible ou la moins expérimentée en affaires n'a pas été spécialement attirée. Le rédacteur de conditions générales doit partir de l'idée, en vertu du principe de la confiance, qu'un partenaire contractuel inexpérimenté n'accepte pas des clauses insolites. Le caractère insolite d'une clause se détermine d'après la perception de celui qui l'accepte au moment de la conclusion du contrat. La règle dite de l'insolite ne trouve application que si, hormis la condition subjective du défaut d'expérience du domaine concerné, la clause a objectivement un contenu qui déroge à la nature de l'affaire. C'est le cas si la clause conduit à un changement essentiel du caractère du contrat ou si elle s'écarte de manière importante du cadre légal du type de contrat concerné. Plus une clause porte préjudice à la position juridique du partenaire contractuel, plus elle sera susceptible d'être qualifiée d'insolite (ATF 138 III 411 consid. 3.1 p. 412 s.; 135 III 1 consid. 2.1 p. 7, 225 consid. 1.3 p. 227 s.). En particulier, la règle de la clause insolite peut trouver application lorsque la clause a pour effet de réduire drastiquement la couverture d'assurance de telle sorte que les risques les plus fréquents ne sont plus couverts, lorsque le sens et la portée d'une disposition sont travestis par une formulation compliquée ou lorsque, par son emplacement dans les conditions générales, elle apparaît surprenante et inattendue à l'assuré (cf. arrêt 5C.53/2002 du 6 juin 2002 consid. 3.1; CHRISTOPH BÜRGI, Allgemeine Versicherungsbedingungen im Lichte der neuesten Entwicklung auf dem Gebiet der Allgemeinen Geschäftsbedingungen, 1985, p. 162).
5.
La recourante se plaint d'une violation de l'art. 18 al. 1 CO en lien avec l'art. 33 LCA.
5.1. Elle soutient tout d'abord qu'ayant exposé à l'assureur sa volonté de faire assurer son activité d'entreprise générale, en tant que notamment directrice des travaux, responsable de la planification, de la coordination et de la surveillance de ceux-ci, elle pouvait légitimement partir de l'idée, selon le principe de la confiance, que l'ensemble de ces activités serait couvert par la police d'assurance responsabilité civile.
Le raisonnement de la recourante ne convainc pas à cet égard. Si telle était la volonté qu'elle a exprimée, encore aurait-il fallu - pour que celle-ci soit commune - que l'assureur manifeste une volonté concordante. Or, rien de tel ne ressort de l'arrêt attaqué. Les juges cantonaux ont bien plutôt constaté, d'une manière qui lie le Tribunal fédéral (art. 105 LTF), que l'intimée avait, en présentant les CGA, manifesté sa volonté de s'engager selon les termes de ces conditions générales, lesquelles prévoient une limitation de la couverture d'assurance aux dommages et défauts aux ouvrages imputables à des activités liées à la planification des travaux - à l'exclusion de celles liées à la direction des travaux - lorsque l'assuré intervient comme entrepreneur général ou entrepreneur total (article 1 let. b ch. 7 CGA).
Au demeurant, il n'est pas établi que l'administrateur unique de la recourante a fait savoir à l'intimée qu'il souhaitait faire assurer tous les aspects de son travail, soit à la fois son activité de planification et celle de direction des travaux dans le domaine immobilier. Seules les déclarations dudit administrateur sont rapportées à ce sujet dans la décision entreprise. Or, elles n'ont pas valeur de faits constatés et la recourante ne se plaint pas d'arbitraire à cet égard. La réelle et commune intention des parties n'étant ainsi pas établie, c'est à juste titre que la cour cantonale a eu recours à l'interprétation objective, ce que la recourante ne remet du reste pas en cause.
5.2. En second lieu, la recourante conteste qu'elle ait pu et dû raisonnablement prêter à l'article 1 let. b ch. 7 CGA le sens que la cour cantonale lui a donné au terme de l'interprétation objective. A ses yeux, cette interprétation - fondée sur la distinction excessivement complexe faite entre l'architecte/l'ingénieur revêtant la qualité d'entrepreneur général (ou total) ou non - serait inaccessible au profane. Les clauses litigieuses seraient ambiguës, de sorte que l'intimée devrait se voir opposer la compréhension que la recourante en a eue de bonne foi.
Selon l'autorité précédente, l'article 1 let. b ch. 7 CGA déroge à l'article 3 CGA en ce sens que si, selon cette dernière disposition, l'assurance s'étend aux ouvrages réalisés sur la base des travaux de planification de l'assuré ou sous sa direction, la première disposition citée restreint la couverture d'assurance aux dommages imputables aux travaux de planification de l'assuré, dans le cas où celui-ci intervient en qualité d'entrepreneur général ou d'entrepreneur total. Cette exclusion ressort explicitement et de manière non équivoque de la disposition querellée, à telle enseigne que la recourante ne pouvait pas comprendre que les activités de direction des travaux qu'elle était amenée à déployer en qualité d'entrepreneur général seraient couvertes.
La cour de céans ne voit rien à redire à ce raisonnement. L'article 1 let. b ch. 7 CGA ne pouvait être compris d'une autre manière que celle retenue par l'autorité cantonale. Quoi qu'en dise la recourante, sans d'ailleurs tenter d'expliquer de quelle autre manière il pourrait être compris, cet article n'a rien d'ambigu. Il n'est pas non plus contradictoire par rapport à l'article 3 CGA, auquel il fait expressément référence: il lui déroge dans un cas bien précis, celui où l'assuré intervient en tant qu'entrepreneur général ou total. Quant à la notion d'entrepreneur général, la recourante ne saurait de bonne foi prétendre méconnaître cette notion puisqu'elle déploie ses activités dans le domaine de la construction de maisons ou des travaux de rénovation et qu'elle est même désignée comme telle ( «X._ SA Entreprise générale ») dans les contrats de construction qu'elle a conclus avec les acquéreurs de la promotion immobilière de.... Comme la clause litigieuse est dépourvue d'ambiguïté, il n'y a pas lieu d'appliquer la règle complémentaire d'interprétation " in dubio contra assicuratorem ", comme le voudrait la recourante, ce qui reviendrait - à bien saisir son propos - à faire abstraction de cette disposition.
5.3. Bien que la recourante n'évoque pas expressément la règle de la clause insolite, ses arguments ne sont pas sans rapport avec celle-ci. On doit ainsi lui concéder que les deux clauses auraient pu être regroupées sous une seule et même disposition, pour en faciliter la compréhension. Le fait que la disposition dérogatoire précède celle à laquelle elle déroge ne concourt pas non plus à cet objectif. Si la clause ne s'avère pas insolite pour autant, il y aurait encore lieu d'examiner si elle a pour effet de réduire drastiquement la couverture d'assurance, de telle sorte que les risques les plus fréquents ne seraient plus couverts. Cet examen se révèle toutefois superflu. En effet, la recourante ne saurait être qualifiée de partenaire contractuel inexpérimenté, qu'il s'agirait de rendre attentive à toute clause insolite. Si elle avait lu les CGA, elle n'aurait certainement pas manqué de déceler la restriction litigieuse.
Au surplus, il convient de préciser que l'art. 8 LCD (RS 241), relatif à l'utilisation de conditions commerciales abusives, ne peut s'appliquer en l'espèce dès lors que la recourante ne rentre pas dans le cercle des consommateurs (cf. KRAMER/PROBST/PERRIG, Schweizerisches Recht der Allgemeinen Geschäftsbedingungen, 2016, n° 515 p. 325 s.; TERCIER/PICHONNAZ, Le droit des obligations, 5 e éd. 2012, n° 886 p. 196 s.).
Il s'ensuit que la cour cantonale n'a enfreint ni l'art. 18 al. 1 CO ni l'art. 33 LCA en interprétant la clause querellée.
6.
En dernier lieu, la recourante s'essaie vainement à démontrer qu'elle était couverte pour l'activité de ses sous-traitants, dans le cadre de l'extension de couverture aux dommages et défauts aux ouvrages et/ou installations ainsi que préjudices pécuniaires. La couverture d'assurance ne lui est en effet pas déniée au motif qu'elle a eu recours à des sous-traitants, mais bien sur la base du raisonnement exposé aux considérants précédents.
7.
Sur le vu de ce qui précède, le recours doit être rejeté.
Les frais judiciaires seront mis à la charge de la recourante (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 (art. 68 al. 1 et 2 LTF).
Par ces motifs, le Tribunal fédéral prononce :
1.
Le recours est rejeté.
2.
Les frais judiciaires, arrêtés à 5'000 fr., sont mis à la charge de la recourante.
3.
Le présent arrêt est communiqué aux mandataires des parties et à la Chambre civile de la Cour de justice du canton de Genève.
Lausanne, le 2 novembre 2017
Au nom de la Ire Cour de droit civil
du Tribunal fédéral suisse
La Présidente : Kiss
La Greffière : Godat Zimmermann