Faits :
A.
En 2005, Z._ (ci-après: la propriétaire) a confié à X._ SA (ci-après: l'architecte) l'exécution de toutes les prestations architecturales afférentes à la construction de sa villa.
Après que l'architecte a calculé le cube SIA de la future villa, envoyé à la propriétaire une proposition de calcul de ses honoraires et établi une première estimation du coût de construction à hauteur de 1'904'000 fr. (dont 1'587'000 fr. pour le prix du bâtiment), une séance a réuni les parties en date du 27 décembre 2005. Selon le procès-verbal dressé par l'architecte, il a été convenu à cette occasion de:
(...)
Préparer proposition de contrat d'architecte sur la base du montant forfaitaire convenu de 250'000 fr.
(...)
L'estimation du coût de la construction (CFC 0-5), basée sur un prix au cube de 700 fr./m3 moyen datant du 29.11.05 est corrigée comme suit par le MO:
- CFC 191 : honoraires d'architecte relatif au CFC 1, compris dans le montant forfaitaire de 250'000 fr.
- CFC 491 : les honoraires d'architecte relatifs au CFC 4 seront compris dans le montant forfaitaire de 250'000 fr. Dans le cas de la construction de la piscine, des honoraires complémentaires, hors forfait, feront partie des prestations supplémentaires et seront établis selon un tarif à définir.
Remarque :
Le montant de 700 fr./m3 étant relativement faible compte tenu du standing et de la complexité du projet, une attention particulière devra être portée sur les choix et les solutions constructives et techniques adoptées lors de la préparation à l'exécution ainsi que l'exécution. "
Dans son quatrième et dernier devis, daté du 20 janvier 2006, l'architecte évaluait le coût de la construction à 1'905'000 fr. Le coût du bâtiment y entrait pour 1'572'000 fr. dont 250'000 fr. pour les honoraires d'architecte. A cette même date, l'architecte a également établi un descriptif de construction de neuf pages mentionnant les postes de la villa pour lesquels les travaux devaient être réalisés.
Le 9 juin 2006, la propriétaire a payé à l'architecte une première facture d'honoraires d'un montant de 65'000 fr.
Aucune des parties n'a signé l'offre de contrat d'architecte SIA établie le 4 octobre 2006 par l'architecte, qui prévoyait d'intégrer la norme SIA 102 et diverses annexes.
Les travaux de construction ont débuté en janvier 2007 pour se terminer le 11 avril 2008.
Le 7 mai 2007, l'architecte a établi un échéancier de paiement de ses honoraires, prévoyant le versement de six acomptes de 25'000 fr. de décembre 2006 à janvier 2008, ainsi que de deux acomptes de respectivement 20'000 fr. et 15'000 fr. les 31 mars et 30 mai 2008. Toutes les demandes d'acomptes mentionnaient qu'ils étaient dus à titre d'«honoraires pour travaux exécutés à ce jour»; elles étaient accompagnées d'un bon de paiement précisant «contrat 001 Architecte 185'000.00 TTC». Les six premiers acomptes ont été versés par la propriétaire, pour un total de 215'000 fr. si l'on inclut la somme de 65'000 fr. précédemment acquittée au même titre.
La demande d'acompte du 25 janvier 2008 précisait que la situation au 31 décembre 2008 (recte: 2007) était de 2'968 heures à 125 fr., soit 371'000 fr., hors taxe.
Se référant à une lettre du 18 janvier 2008 et à la facture du 25 janvier 2008, la propriétaire a écrit à l'architecte le 17 février 2008 pour lui signifier notamment qu'« aucun coût supplémentaire de [sa] part n'était et serait accepté».
Le 18 mars 2008, l'architecte lui a répondu que la problématique du montant des honoraires devrait, dans tous les cas, être abordée lors d'une séance à convenir, que le devis général, déterminant pour le calcul des honoraires, avait à l'époque été établi sur la base d'un prix au cube qui ne correspondait pas à la réalité de la construction et des choix effectués pour la maison, de sorte qu'il était normal que le montant des honoraires soit renégocié.
Le 10 août 2009, l'architecte a fait savoir à la propriétaire que ses honoraires, calculés sur la base d'un montant de 2'102'760 fr.35, se montaient à 354'000 fr.
Le 11 novembre 2011, l'architecte a écrit à la propriétaire les lignes suivantes:
" Nous vous avons sollicité à diverses reprises par mail, courrier et téléphone, afin de fixer un rendez-vous concernant le bouclement de l'affaire citée en marge au niveau des honoraires, sans réponse de votre part.
En effet, nous avons laissé en attente les deux derniers acomptes, soit n° 7 et 8, de l'échéancier selon le contrat d'architecte, le temps de régler les divers problèmes que vous aviez soulevés concernant votre maison.
Dès lors que ceux-ci mettent un temps considérable à se régler et que vous habitez votre maison depuis maintenant env. 3 ans, nous vous transmettons, ci-joint, nos factures concernant le solde dû selon contrat et la facture finale de frais et débours.
D'autre part, dès lors que le montant d'honoraires était calculé sur la base d'un montant de travaux, CFC 1, 2 et 4 hors honoraires et TVA de 1'471'120 fr., que le montant effectif des travaux est, selon notre décompte final, de 2'107'760 fr., le montant des honoraires est considérablement plus élevé que celui défini par le contrat.
(...) ".
Ce courrier était accompagné de deux factures, l'une de 35'000 fr. correspondant au solde des honoraires d'architecte et l'autre de 621 fr.45 à titre de frais et débours pour la période du 2 avril 2008 au 9 septembre 2009. Elles sont demeurées impayées.
Le 18 septembre 2012, l'architecte a envoyé à la propriétaire une nouvelle facture d'un montant de 104'000 fr. représentant les honoraires dus en raison des travaux supplémentaires. Cette facture n'a pas non plus été acquittée.
B.
Par requête de conciliation du 31 octobre 2012, X._ SA a ouvert action contre Z._. Après l'échec de la conciliation et la délivrance de l'autorisation de procéder, l'architecte a déposé sa demande devant la Chambre patrimoniale du canton de Vaud, concluant au paiement par la défenderesse des sommes de 35'000 fr., 621 fr.45 et 104'000 fr. avec intérêts.
Un expert judiciaire a été désigné en la personne de A._, lequel a déposé son rapport le 19 février 2014, puis un rapport complémentaire le 15 septembre 2015.
Par jugement du 26 avril 2016, la Chambre patrimoniale cantonale a prononcé que la défenderesse devait verser à la demanderesse 139'621 fr.45 avec intérêts, sous déduction de 1'083 fr.30, valeur au 13 décembre 2013. En droit, les premiers juges ont retenu que les parties avaient conclu un contrat d'architecte global et convenu d'un prix forfaitaire de 250'000 fr., dont 215'000 fr. avaient déjà été payés; Z._ était débitrice du solde, soit 35'000 fr. En outre, X._ SA avait droit à la rémunération de 104'000 fr. à laquelle elle prétendait pour les travaux supplémentaires, ainsi qu'au remboursement de 621 fr.45 à titre de frais et débours engendrés lors de la phase finale de la construction, lesquels n'étaient pas compris dans le montant forfaitaire. La Chambre patrimoniale a déduit une somme de 1'083 fr.30 du montant total dû à l'architecte par 139'621 fr.45, estimant que la défenderesse avait invoqué à raison ses droits de garantie par voie d'exception.
Par arrêt du 15 août 2017, la Cour d'appel civile du canton de Vaud a partiellement admis aussi bien l'appel de Z._ que l'appel joint de X._ SA. Elle a condamné la défenderesse à payer à la demanderesse 35'621 fr.45 avec intérêts, soit le solde des honoraires d'architecte convenus à forfait et le montant de la note de frais et débours. En revanche, Z._ ne devait rien de plus, dans la mesure où l'architecte n'avait pas démontré avoir réalisé des prestations supplémentaires par rapport à celles comprises dans les honoraires forfaitaires. L'expertise judiciaire n'était à cet égard pas probante, l'expert - bien qu'il confirmât l'existence de travaux supplémentaires - s'étant dispensé d'examiner en quoi ils auraient consisté, dans quelle mesure ils auraient engendré un travail supplémentaire de la demanderesse et quels seraient exactement les honoraires supplémentaires auxquels celle-ci aurait pu prétendre à ce titre; la simple affirmation de l'expert selon laquelle la facture du 18 septembre 2012 pour les prestations complémentaires serait raisonnable et justifiée dans sa quotité était insuffisante. La Cour d'appel civile a toutefois donné raison à X._ SA en cela qu'une réduction de la somme qui lui était due en raison des défauts de l'ouvrage immobilier n'avait pas lieu d'être, puisqu'aucun avis des défauts n'avait été donné en temps utile, le fait que la garantie soit invoquée par voie d'exception ne changeant rien à cet égard.
C.
X._ SA interjette un recours en matière civile, reprenant en substance les conclusions formulées dans sa demande.
Dans sa réponse, Z._ propose le rejet du recours.
Pour sa part, la cour cantonale se réfère aux considérants de son arrêt.
Considérant en droit :
1.
1.1. Interjeté en temps utile (art. 100 al. 1 LTF) par la partie qui a succombé partiellement dans ses conclusions en paiement (art. 76 al. 1 LTF) et dirigé contre une décision finale (art. 90 LTF) prise sur recours par le tribunal supérieur du canton (art. 75 LTF) dans une contestation en matière civile dont la valeur litigieuse est supérieure à 30'000 fr. (art. 72 al. 1 et art. 74 al. 1 let. b LTF), le recours est recevable au regard de ces dispositions.
1.2. Le Tribunal fédéral statue sur la base des faits retenus par l'autorité précédente (art. 105 al. 1 LTF) et des faits constatés dans le jugement de première instance, dans la mesure où ceux-ci sont repris au moins implicitement dans la décision attaquée (arrêt 4A_565/2009 du 21 janvier 2010 consid. 2.2.4; sous l'OJ, ATF 129 IV 246 consid. 1 p. 248; 118 IV 122 consid. 1 p. 124). 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).
En matière d'appréciation des preuves, le Tribunal fédéral se montre pareillement réservé. Il 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 140 III 264 consid. 2.3 p. 265; 137 III 226 consid. 4.2).
2.
Les parties ont conclu un contrat d'architecte global. Il s'agit d'un contrat mixte qui est soumis, selon les prestations promises par l'architecte, aux règles du mandat ou à celles du contrat d'entreprise (ATF 134 III 361 consid. 5.1 p. 363; 127 III 543 consid. 2a p. 545; arrêts 4A_514/2016 du 6 avril 2017 consid. 3.1.1, 4A_210/2015 du 2 octobre 2015 consid. 4). Il résulte de l'état de fait établi par la cour cantonale que les parties ont convenu, au titre des honoraires d'architecte, d'un montant forfaitaire correspondant à 250'000 fr. Ce mode de rémunération peut être adopté tant dans le domaine du contrat d'entreprise (art. 373 al. 1 CO) que dans celui du mandat (FRANZ WERRO, in Commentaire romand, Code des obligations I, 2 e éd. 2012, n° 48 ad art. 394 CO).
A ce stade, le litige porte uniquement sur le montant de 104'000 fr., auquel l'architecte prétend à titre d'honoraires supplémentaires pour des prestations qu'il aurait accomplies en sus de celles rémunérées forfaitairement. Faute de recours de l'intimée, le montant de 35'621 fr.45 avec intérêts que celle-ci a été condamnée à payer par la cour cantonale n'est en effet plus litigieux.
La recourante reproche essentiellement à l'autorité précédente d'avoir apprécié de manière arbitraire l'expertise censée démontrer ses allégués fondant la prétention pécuniaire contestée.
2.1. Le raisonnement de la Cour d'appel civile peut se résumer ainsi. Si l'architecte prétend à des honoraires d'un montant supérieur au forfait convenu, il lui appartient, conformément à l'art. 8 CC, de démontrer qu'il a accompli des prestations exorbitantes de celles initialement prévues, rémunérées par le forfait. Or, la recourante - à laquelle incombait le fardeau de la preuve - n'avait pas démontré avoir accompli de semblables prestations. Le rapport d'expertise s'était concentré principalement sur les divers postes de dommage allégués par l'intimée. A propos des travaux supplémentaires, il comportait les observations suivantes: " Force est de constater que de nombreux travaux supplémentaires, non prévus initialement, ont été réalisés sous le contrôle de [l'architecte] qui en a établi une liste non exhaustive. La visite des lieux et la qualité finale de l'ouvrage permettent à l'expert d'affirmer que des travaux supplémentaires ont bien été exécutés. " Dans sa conclusion, l'expert mentionnait à cet égard que la liste non exhaustive des travaux supplémentaires établie par l'architecte était de ce point de vue révélatrice et qu'il avait pu en observer la pertinence lors de ses visites, «ceci sans entrer dans les détails». Ainsi, alors même que l'expert exposait que des travaux supplémentaires avaient été réalisés, il n'indiquait pas techniquement, en sa qualité d'expert judiciaire, en quoi ils avaient consisté, en quoi ils avaient engendré un travail supplémentaire de l'architecte, ni quels étaient exactement les honoraires supplémentaires auxquels la recourante aurait pu prétendre. La simple affirmation selon laquelle la facture du 18 septembre 2012 pour les prestations complémentaires serait raisonnable et justifiée dans sa quotité était insuffisante à cet égard. Même à admettre que l'expert ait entériné la liste des travaux supplémentaires, par simple renvoi à la pièce intitulée «Liste non exhaustive des plus-values (estimations approximatives) » établie par la recourante, il n'indiquait pas en quoi ces travaux avaient engendré un travail supplémentaire de cette dernière.
2.2. Seules des questions de fait, à l'exclusion des questions de droit, peuvent être soumises à un expert judiciaire (ATF 130 I 337 consid. 5.4.1 p. 345). Déterminer si une expertise est convaincante ou non sur des points précis relève donc de l'appréciation des preuves, que le Tribunal fédéral ne peut revoir que sous l'angle de l'arbitraire (art. 9 Cst.).
Le juge n'est en principe pas lié par le résultat d'une expertise judiciaire. S'il apprécie librement la force probante d'une expertise, le juge du fait ne peut toutefois s'écarter des conclusions de l'expert sur des éléments ressortissant de sa compétence professionnelle que pour des motifs importants qui doivent être indiqués. Il lui appartient dès lors d'examiner, au regard des autres preuves et des observations des parties, si des objections sérieuses mettent en doute le caractère concluant de l'expertise sur des points essentiels. En d'autres termes, le juge qui ne suit pas les conclusions de l'expert, n'enfreint pas l'art. 9 Cst. lorsque des circonstances bien établies viennent en ébranler sérieusement la crédibilité (ATF 138 III 193 consid. 4.3.1 p. 198 s.; 136 II 539 consid. 3.2 p. 547 s.; 133 II 384 consid. 4.2.3 p. 391; 132 II 257 consid. 4.4.1 p. 269; 130 I 337 consid. 5.4.2 p. 345 s.).
2.2.1. La recourante admet que des honoraires forfaitaires ont été convenus et que ce n'est que pour des prestations excédant celles couvertes par le forfait qu'elle pourrait être rémunérée en supplément. Elle supporte le fardeau de la preuve des prestations qui sont incluses dans le forfait comme de celles qui excèdent celui-ci (cf. arrêt 4A_291/2007 du 29 octobre 2007 consid. 4.3), ce qu'elle ne remet pas en question.
S'agissant des prestations rémunérées forfaitairement, la recourante fait grief à la Cour d'appel civile de ne pas avoir repris des faits que la Chambre patrimoniale cantonale aurait retenus. Il s'agirait du contenu du descriptif de construction du 20 janvier 2006 - dont les premiers juges auraient reproduit le contenu in extenso aux pages 3 à 9 de leur jugement - et du document intitulé « comparatif du coût estimé et du coût final utilisé pour le calcul d'honoraires» du 28 janvier 2013. Elle reproche également à l'autorité précédente d'avoir constaté de manière arbitraire que, sur le procès-verbal du 27 décembre 2005, les prestations comprises dans le forfait n'étaient pas détaillées, puisque - à l'en croire - ce détail ressortirait du descriptif de construction du 20 janvier 2006.
Cela étant, l'existence des pièces susmentionnées n'a pas été passée sous silence par la cour cantonale. Et surtout, la recourante ne démontre pas, références à l'appui, avoir allégué dans les formes en procédure les prestations qui seraient incluses dans le forfait. Au regard des exigences strictes qui prévalent à cet égard (cf. consid. 1.2 supra), c'est sans arbitraire que l'autorité précédente a constaté que l'accord initial ne décrivait pas dans le détail ce qui était compris dans le forfait.
2.2.2. La recourante reproche à la cour cantonale de s'être écartée de manière arbitraire du rapport d'expertise, dont il résulte que des travaux supplémentaires ont bien été exécutés.
Sur ce point, les citations que la recourante tire du rapport ou de la lecture de ses annexes « réunies en un épais onglet» sans lequel - à l'en croire - le rapport ne pourrait pas se lire, n'enlèvent toutefois rien au fait que l'expert a lui-même concédé ne pas être entré dans les détails de la liste «non exhaustive» des travaux supplémentaires établie par la recourante. Qu'il en ait «observ (é) la pertinence lors de ses visites», selon les termes qu'il a utilisés dans son rapport, ne signifie pas - loin s'en faut - qu'il les ait passés en revue individuellement. Et c'est bien là que le bât blesse. On ne saurait par ailleurs faire grief à la cour cantonale de ne pas avoir débusqué quelques postes ça et là dans le rapport d'expertise, qu'il faudrait d'après la recourante subsumer dans la catégorie des travaux supplémentaires, pour en déduire que l'expert aurait procédé à l'examen de détail querellé: l'intéressé concède en effet lui-même ne pas être allé jusque là.
Que l'expert ait relevé que la villa était loin d'être une réalisation à 700 fr. le m 3, selon les visites qu'il en avait faites, ne justifiait pas de renoncer à un plus ample examen. En effet, il est parfaitement possible que le coût de construction évalué initialement ne se soit pas révélé correct, sans que des travaux de construction supplémentaires aient été exécutés ou, si travaux de construction supplémentaires il y a effectivement eu, que la recourante n'ait pas déployé d'activité en relation avec ceux-ci. Le nombre d'heures que la recourante a consacrées au projet, qu'il soit ou non très différent de ce qui avait été estimé initialement, n'est pas davantage probant.
2.2.3. La recourante fait également grief à la cour cantonale de s'être arbitrairement écartée de l'expertise qui indique que «de nombreux travaux supplémentaires, non prévus initialement, ont été réalisés sous le contrôle [de la recourante] qui en a établi une liste non exhaustive (pièce n° 8) ». La référence au contrôle de la recourante démontrerait, selon elle, qu'elle a bien exécuté une prestation en relation avec ces hypothétiques travaux de construction supplémentaires.
Contrairement à ce que la recourante entrevoit à travers elle, la simple expression «sous le contrôle de», perdue dans le rapport d'expertise, ne paraît pas pouvoir être rattachée à un travail bien déterminé dont l'expert aurait constaté l'existence. La recourante n'est d'ailleurs pas plus explicite dans son mémoire; on n'y trouve nulle trace de la prestation précise qu'elle aurait allégué en procédure avoir déployée. Enfin, les «vus» que l'expert aurait apposés au regard des différents postes de l'annexe Cc au rapport d'expertise, valant prétendument vérification du calcul des honoraires de la recourante, ne changent rien à ces carences.
2.3. En conclusion, il n'y a rien à redire - sous l'angle de l'arbitraire - au fait que la cour cantonale se soit distanciée des conclusions de l'expert, qu'elle tenait pour insuffisamment fondées sur le point litigieux, et qu'elle ait jugé que la recourante n'avait pas prouvé l'existence de travaux de construction supplémentaires ainsi que des prestations qu'elle aurait accomplies en relation avec ceux-ci.
3.
Partant, le recours se révèle privé de fondement.
A titre de partie qui succombe, la recourante prendra à sa charge les frais de la procédure (art. 66 al. 1 LTF) et versera des dépens à l'intimée (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.
La recourante versera à l'intimée une indemnité de 6'000 fr. à titre de dépens.
4.
Le présent arrêt est communiqué aux mandataires des parties et à la Cour d'appel civile du Tribunal cantonal du canton de Vaud.
Lausanne, le 31 juillet 2018
Au nom de la Ire Cour de droit civil
du Tribunal fédéral suisse
La Présidente : Kiss
La Greffière : Godat Zimmermann