Faits : A. A.a. Par contrat du 27 octobre 2004, B._ (ci-après: la cliente), née en septembre 1923, a conféré à la société A._ SA (ci-après: la gérante) le mandat de gérer ses actifs déposés auprès de la banque C._ SA (ci-après: la Banque) à Neuchâtel. L'art. 5 du contrat prévoyait que «le Mandataire exercera le mandat de gestion conformément à la politique de placement expressément convenu (sic) avec le Mandant et consigné (sic) dans le document A1». L'art. 9 avait la teneur suivante: «Le Mandataire ne peut être tenu responsable des actions ou des omissions fondées sur la bonne foi, c'est-à-dire qu'il répond uniquement des cas de négligence grave. (...) ». Le document A1, daté du même jour, qualifiait le «profil du client» de «dynamique», par opposition à «conservateur» ou «pondéré». Le placement avait pour objectif la croissance réelle du capital, la cliente étant prête à prendre des risques, selon une attitude plutôt agressive. La monnaie de référence des placements était le franc suisse et des investissements spéculatifs étaient autorisés. Une deuxième annexe A2 précisait que «Le présent acte autorise la société à effectuer pour le compte du client des placements à caractère spéculatif (options, situations spéciales, obligations à haut rendement, instruments dérivés de toutes sortes) », cela à hauteur de 80 % du montant des avoirs. Figurait encore la clause selon laquelle «Les risques inhérents à ces types d'investissement sont entièrement connus et acceptés par le client. Sa disposition à assumer des pertes est totale». A.b. Au 31 décembre 2004, les avoirs de la cliente auprès de la Banque s'élevaient à environ 180'000 fr. La cliente était en outre titulaire d'un dépôt auprès d'une banque privée, pour une valeur de quelque 195'000 fr. A fin février 2007, le dossier titres détenu auprès de cet établissement a été transféré à la Banque, qui est devenue seule dépositaire dès ce moment-là. Au 25 juin 2009, la valeur du portefeuille de la demanderesse auprès de la Banque est tombée à 8'700 fr. La cliente dit avoir découvert la disparition quasi-totale de sa fortune au printemps 2009, au moment de remplir sa déclaration d'impôts avec l'aide de proches; elle a alors chargé un mandataire d'obtenir des explications circonstanciées de la gérante. Il s'en est suivi un échange de correspondances, à l'occasion duquel la gérante a fourni quelques documents bancaires, sans guère donner d'explications sur les raisons de la perte constatée. B. B.a. Par demande déposée le 27 octobre 2009 devant le Tribunal cantonal neuchâtelois, la cliente (ci-après: la demanderesse) a actionné la gérante (ci-après: la défenderesse) en paiement de 147'675 fr. plus intérêts, somme correspondant au dommage qu'elle considérait avoir subi du fait de la mauvaise gestion de son portefeuille par la défenderesse. En substance, la demanderesse alléguait qu'au 31 décembre 2007, son capital était encore de 243'500 fr., montant dont il fallait déduire 35'000 fr. qu'elle avait prélevés au cours de l'année 2008. De ces 208'500 fr., il ne subsistait plus que 8'700 fr. en juin 2009, la perte effective étant de 199'800 fr. (208'500 - 8'700). La perte admissible eu égard à la chute générale des marchés aurait été de - 25 %, soit 52'125 fr. La demanderesse chiffrait ainsi son dommage à 147'675 fr. (199'800 - 52'125). B.b. Par réponse du 25 janvier 2010, la défenderesse a conclu au rejet intégral de la demande. B.c. Ensuite de l'entrée en vigueur du CPC et de la nouvelle organisation judiciaire neuchâteloise, la cause a été transférée au Tribunal civil du Littoral et du Val-de-Travers (ci-après: le Tribunal civil). Une expertise judiciaire a été mise en oeuvre. L'expert, qui exploite un bureau fiduciaire, a déposé un rapport principal le 11 juin 2013 et un complément le 24 décembre 2013. B.d. Par jugement du 9 juin 2015, le Tribunal civil a condamné la défenderesse à verser à la demanderesse la somme de 96'988 fr. plus intérêts. Son raisonnement est succinctement résumé ci-dessous. Le contrat de gestion conclu par les parties est soumis aux règles du mandat, en particulier quant à la responsabilité de la défenderesse en tant que gérante de fortune indépendante. Celle-ci a violé son devoir d'information tant à la conclusion du contrat qu'au cours de son exécution; elle s'est écartée sans droit des instructions contenues dans le contrat et a plus généralement violé les règles élémentaires de la profession en matière de sauvegarde des intérêts du mandant. Il s'agit là d'une faute grave, rendant inopérante la clause d'exclusion de responsabilité figurant à l'article 9 du contrat. La preuve du dommage étant très difficile à apporter, il faut recourir à l'art. 42 al. 2 CO et procéder en équité, par comparaison avec le résultat d'une gestion qui aurait été conforme au contrat, en tenant compte de l'évolution des marchés financiers. Il ressort de l'expertise que la perte subie par le portefeuille de la demanderesse est supérieure de 80'189 fr. par rapport à l'indice UBS Actions dont la monnaie de référence est le franc suisse, respectivement supérieure de 96'988 fr. par rapport à l'indice Euro Stoxx 50 exprimé en euro. En définitive, le tribunal s'est fondé sur ce dernier indice, considéré comme le plus proche du type de gestion pratiquée par la défenderesse, du point de vue de l'expert et de l'aveu même de la défenderesse. B.e. Par arrêt du 7 décembre 2015, la Cour d'appel civile du Tribunal cantonal neuchâtelois a rejeté l'appel interjeté par la défenderesse contre le jugement du 9 juin 2015. C. La défenderesse a interjeté un recours en matière civile au Tribunal fédéral, concluant à ce que la demande du 27 octobre 2009 soit entièrement rejetée. La demanderesse a sollicité l'octroi de l'assistance judiciaire et déposé dans le même temps une réponse concluant au rejet du recours. L'autorité précédente s'est référée à son arrêt.