Faits :
A.
A.a. A._ était employé par la société C._ SA depuis le 1er mars 2018 en qualité de commercial. Dans ce cadre, il bénéficiait de l'«assurance maladie collective» souscrite par son employeuse auprès de la société B._ SA.
L'art. 1 des Conditions complémentaires pour l'assurance de l'indemnité journalière de maladie (ci-après: CCAIJ) précisait que «[s]ont assurées des indemnités journalières en cas d'incapacité de travail par suite d'une maladie ayant pour conséquence une perte de gain».
L'art. 17 des Conditions générales pour l'assurance maladie collective (ci-après: CG) conférait à la personne assurée «le droit de continuer l'assurance à titre d'assurance individuelle, au tarif individuel et aux conditions complémentaires déterminantes», notamment dans l'hypothèse où la couverture d'assurance s'éteignait à cause de la cessation des rapports de travail. «Le droit au maintien de la couverture d'assurance individuelle d[eva]it être requis par écrit par la personne assurée dans les 90 jours qui suiv[ai]ent sa sortie du cercle des assurés, sans quoi ce droit s'étei[gnai]t.»
A.b. Du 24 août au 23 septembre 2018, l'assuré s'est trouvé totalement incapable de travailler pour cause de maladie. Il a repris son activité à plein temps le 24 septembre 2018. Le 27 septembre 2018, la société d'assurances lui a versé les prestations découlant du contrat d'assurance collective, qui se sont réduites à une seule indemnité journalière compte tenu du délai d'attente de trente jours.
L'employeuse a licencié A._ avec effet au 31 octobre 2018.
Le prénommé a quitté ses fonctions à cette date. Il ne s'est pas inscrit auprès de la caisse de chômage.
Dès le 6 novembre 2018, il s'est retrouvé en incapacité complète de travail pour cause de maladie.
Le 29 novembre 2018, il a téléphoné à la société d'assurances pour annoncer que son contrat de travail avait été résilié au 31 octobre 2018 et demander des «informations au sujet du libre-passage»; il faisait état d'un événement maladie du 24 août 2018.
Par courrier du même jour, la société d'assurances a informé l'assuré des modalités de passage à l'assurance individuelle, notamment du délai de 90 jours.
Le 13 décembre 2018, l'assuré a rempli, signé et adressé à la société d'assurances une formule d'«[i]nscription pour la continuation de l'assurance à titre d'assurance individuelle». Le 29 janvier 2019, il a signé une proposition d'assurance dans laquelle il répondait par la négative aux questions de savoir s'il était au chômage après son départ de l'entreprise assurée, s'il exerçait une profession lucrative indépendante après ce départ et s'il était en incapacité de travail au moment de sa sortie de l'entreprise.
Par courriel du 31 janvier 2019, la fiduciaire de l'assuré a envoyé la proposition signée à la société d'assurances en indiquant notamment que l'entrée en vigueur de la police remontait au 13 décembre 2018 et que des indemnités étaient dues dès cette date.
Le 22 février 2019, la société d'assurances a envoyé à l'assuré une police d'«assurance maladie collective» avec «passage de l'assurance collective à l'assurance individuelle» mentionnant un «début d'assurance» au 13 décembre 2018. Dans un courrier d'accompagnement, elle indiquait qu'il n'existait actuellement aucun droit aux prestations de l'assurance individuelle en raison du fait qu'une perte de revenu constituait un prérequis; elle recommandait à l'assuré de s'inscrire à la caisse de chômage.
Le 4 mars 2019, l'assuré a adressé à la société d'assurances une déclaration de maladie annonçant une incapacité de travail dès le 24 août 2018 provoquée par un burnout.
Par lettre du 14 mars 2019, la société d'assurances a refusé les prestations pour le sinistre annoncé en faisant valoir les arguments suivants:
- l'assurance était entrée en vigueur le 13 décembre 2018;
- la couverture découlant du contrat conclu avec l'ex-employeuse avait pris fin le 31 octobre 2018;
- même si l'incapacité de travail ayant débuté le 6 novembre 2018 constituait une rechute, elle ne pouvait être prise en charge du fait de l'interruption de la couverture entre le 1er novembre et le 13 décembre 2018;
- enfin, l'assuré ne bénéficiait d'aucun droit à des prestations, faute d'une quelconque perte de revenu provenant d'une activité lucrative ou de l'assurance-chômage.
Dans l'intervalle, le médecin traitant de l'assuré a fait état d'une incapacité de travail à 100 % du 24 août au 23 septembre 2018, puis du 6 novembre 2018 au 28 février 2019 en raison d'un burnout. D'autres certificats ont suivi, attestant d'une incapacité totale à 100 % jusqu'au 14 avril 2019 pour cause de maladie.
Le 15 avril 2019, l'assuré a repris une activité lucrative indépendante.
B.
Le 13 mai 2019, l'assuré a assigné la société d'assurances en conciliation devant le Tribunal régional des Montagnes et du Val-de-Ruz (NE). Il a ensuite déposé une demande tendant à ce que la société d'assurances lui paie la somme de 23'524 fr. 05 avec intérêts. Il alléguait notamment que l'incapacité de travail ayant débuté le 6 novembre 2018 constituait une rechute, raison pour laquelle il serait resté couvert par l'assurance contractée par son ex-employeuse.
Par jugement du 16 novembre 2020, le Tribunal régional a rejeté la demande en paiement. En substance, il a considéré que l'assuré avait été couvert par deux polices successives. La première, conclue par C._ SA au profit de ses salariés, avait pris fin le 31 octobre 2018 avec la cessation des rapports de service. A ce moment-là, l'assuré avait recouvré sa pleine capacité de travail. La seconde, conclue à la demande de l'assuré, avait débuté le 13 décembre 2018 alors qu'il se trouvait en arrêt de travail pour cause de maladie dès le 6 novembre précédent. Comme les conditions générales d'assurance excluaient la couverture pour les maladies en cours à l'entrée en vigueur du contrat, l'assuré ne pouvait prétendre à une indemnisation. Par surabondance, l'art. 1 CCAIJ conditionnait l'indemnisation à une perte de gain effective. Or, l'assuré avait admis ne pas s'être inscrit à l'assurance-chômage et n'avait pas démontré avoir subi une perte de gain d'une autre nature. Pour ce second motif, sa demande s'avérait également mal fondée.
L'assuré a appelé de ce jugement.
Par arrêt du 12 janvier 2021, la Cour d'appel civile du Tribunal cantonal neuchâtelois a prononcé le rejet de l'appel, «irrecevable et au surplus manifestement mal fondé». Ses motifs seront évoqués dans les considérants en droit du présent arrêt.
C.
L'assuré forme un recours constitutionnel subsidiaire au Tribunal fédéral en reprenant les conclusions de sa demande en paiement.
La société d'assurances, dans sa réponse, conclut au rejet de ce recours dans la mesure de sa recevabilité. Quant à l'autorité précédente, elle s'est référée à son arrêt.

Considérant en droit :
1.
Le litige porte sur le droit aux prestations découlant d'une assurance d'indemnités journalières en cas de maladie soumise à la LCA (loi fédérale sur le contrat d'assurance; RS 221.229.1). Les conflits relatifs à ce type d'assurance relèvent de la matière civile au sens de l'<ref-law> (<ref-ruling> consid. 1.1; <ref-ruling> consid. 2.1; arrêt 4A_230/2016 du 6 septembre 2016 consid. 1). Cela étant, la valeur litigieuse est inférieure à 30'000 fr. (<ref-law>), de sorte que la voie du recours en matière civile n'est pas ouverte, étant précisé que le recourant ne soutient pas que la contestation soulèverait une question juridique de principe. Demeure celle du recours constitutionnel subsidiaire (<ref-law>), que le recourant a précisément choisie.
Le recours a été déposé en temps utile (art. 117 et 100 al. 1 LTF) contre une décision finale (art. 117 et 90 LTF) émanant d'un tribunal supérieur statuant sur recours (art. 114 et 75 LTF). Son auteur a pris part à la procédure devant l'autorité précédente et a un intérêt juridique à la modification de la décision (<ref-law>).
2.
Le recours constitutionnel peut être formé uniquement pour violation des droits constitutionnels (<ref-law>) tels que la prohibition de l'arbitraire (art. 9 Cst.). Conformément au principe d'allégation, le Tribunal fédéral n'examine que les griefs expressément soulevés et motivés (art. 117 et 106 al. 2 LTF). Le recourant doit indiquer quel droit ou principe constitutionnel a été violé par l'autorité précédente et dans quelle mesure, en présentant une argumentation claire et circonstanciée; des critiques simplement appellatoires ne sont pas admissibles (<ref-ruling> consid. 2.2; <ref-ruling> consid. 3.2).
Au surplus, le Tribunal fédéral statue sur la base des faits établis par l'autorité précédente (<ref-law>) et ne peut rectifier ou compléter les constatations de cette dernière que si les faits ont été établis en violation du droit constitutionnel (art. 118 al. 2 et <ref-law>).
Ceci signifie que le rappel des faits auquel se livre le recourant en p. 4 ss de son mémoire n'a aucune portée. Seuls comptent les faits constatés par la cour cantonale dans l'arrêt attaqué, sous réserve d'arbitraire.
3.
3.1. Les juges neuchâtelois ont constaté que le recourant figurait dans le cercle des personnes bénéficiant de l' assurance collective contractée par son ancienne employeuse. Il a touché des prestations à ce titre, même si elles se sont limitées à une seule et unique indemnité journalière, compte tenu du délai d'attente.
Selon les conditions générales régissant cette assurance collective, la couverture d'assurance de chaque assuré prenait fin à la cessation des rapports de travail (art. 8 al. 1 let. c CG). Le droit aux prestations d'assurance s'éteignait en principe avec l'expiration de la couverture d'assurance (art. 9 ch. 1 CG), sous réserve de différentes situations donnant droit à des prestations subséquentes (art. 9 ch. 2 CG). Le premier juge a constaté que la couverture d'assurance avait pris fin le 31 octobre 2018 avec la cessation des rapports de service et a dénié à l'assuré le droit à des prestations subséquentes au motif qu'il avait retrouvé sa pleine capacité de travail à cette date. Cette conclusion est manifestement fondée sur l'art. 9 ch. 2 CG, qui impose à la société d'assurances de (continuer à) verser l'indemnité journalière «pour les maladies provoquant une incapacité de travail lors de l'expiration de la couverture d'assurance» (art. 9 ch. 2 al. 1 let. a CG), et pour autant que «l'incapacité de travail persiste de manière ininterrompue en étant due à la même cause» (art. 9 ch. 2 al. 2 CG), régime qui avait été allégué par la société d'assurances.
Le recourant s'estime victime d'une violation du droit d'être entendu (art. 29 al. 2 Cst.) dans la mesure où les juges cantonaux n'ont pas discuté son argument principal selon lequel l'incapacité de travail ayant débuté le 6 novembre 2018 serait une rechute de sa maladie apparue au mois d'août précédent. Pour que les juges cantonaux évaluent cet argument, il eût fallu que l'appel soit recevable, ce que la cour cantonale a tranché négativement sans verser dans l'arbitraire, ainsi qu'on le verra ci-après. Au surplus, l'autorité précédente a précisé que la prise en charge par l'assureur supposait une perte de gain effective, argument suffisant à sceller le sort de la cause sans qu'il fût nécessaire de statuer sur la question de la rechute. Il n'y a donc nulle violation de ce droit constitutionnel dont le recourant serait fondé à se plaindre.
3.2. Quant à l' assurance individuelle contractée par l'assuré, il a été souverainement constaté qu'elle avait pris effet le 13 décembre 2018.
Le premier juge avait rejeté les prétentions que l'assuré tirait de ce contrat sur la base de deux motivations alternatives et indépendantes:
- En premier lieu, les conditions générales (CG) excluaient la couverture pour les maladies en cours à l'entrée en vigueur du contrat et l'assuré était déjà en incapacité de travail à ce moment-là (son arrêt de travail remontant au 6 novembre 2018).
- En second lieu, l'art. 1 CCAIJ conditionnait l'indemnisation à une perte de gain effective. Or, l'assuré avait admis ne pas s'être inscrit à l'assurance-chômage après la fin de son contrat de travail et n'avait pas démontré avoir subi une perte de gain d'une quelconque autre nature.
L'autorité précédente a pour sa part estimé que l'appel de l'assuré était irrecevable dans la mesure où il ne remettait pas en cause cette seconde motivation et qu'en tout état de cause il était infondé dès lors qu'aucune perte de gain n'était établie.
Le recours est dirigé contre les deux pans de l'arrêt sur appel.
3.3. Dans un premier grief, le recourant entend démontrer que la Cour d'appel a fait une application arbitraire de l'<ref-law> en considérant que l'appel n'était pas suffisamment motivé sur le point de sa perte de gain effective. En particulier, il ressortirait d'un passage de son appel que «si la rechute est couverte au même titre que la maladie initiale, la couverture d'assurance qui prévalait lors de la première période de maladie trouve également application au moment de la rechute». Ceci se traduirait, d'après le recourant, de la manière suivante: sous le régime de la rechute, une absence de perte de gain ne serait pas pertinente.
3.3.1. Une jurisprudence constante veut que si une décision comporte une double motivation (i.e deux motivations indépendantes, alternatives ou subsidiaires), il incombe au recourant, sous peine d'irrecevabilité, de démontrer que chacune d'elles est contraire au droit (en application de l'<ref-law>, cf. <ref-ruling> consid. 3.4 p. 735; <ref-ruling> consid. 6.3). Cette jurisprudence trouve également application sous l'empire du CPC (cf. <ref-law>; arrêts 4A_614/2018 du 8 octobre 2019 consid. 3.2; 4A_90/2017 du 12 mai 2017; 4A_525/2014 du 5 mai 2014 consid. 2-4). On ne peut parler de double motivation que si chacun de ses pans suffit à sceller le sort de la cause (arrêt précité 4A_614/2018 consid. 3.2).
L'appelant doit démontrer le caractère erroné de la motivation (ou des motivations alternatives) de la décision attaquée par une argumentation suffisamment explicite pour que l'instance d'appel puisse la comprendre, ce qui suppose une désignation précise des passages de la décision qu'il attaque et des pièces du dossier sur lesquelles repose sa critique (<ref-ruling> consid. 4.3.1 p. 375; <ref-ruling> consid. 2.3.3). Même si l'instance d'appel applique le droit d'office (<ref-law>), le procès se présente différemment en seconde instance. L'appelant doit tenter de démontrer que sa thèse l'emporte sur celle de la décision attaquée. Il ne saurait se borner à reprendre des allégués de fait ou des arguments de droit présentés en première instance, mais il doit s'efforcer d'établir que, sur les faits constatés ou sur les conclusions juridiques qui en ont été tirées, la décision attaquée est entachée d'erreurs. Il ne peut le faire qu'en reprenant la démarche du premier juge ou en mettant le doigt sur les failles de son raisonnement. Si la motivation de l'appel est identique aux moyens qui avaient déjà été présentés en première instance, si elle ne contient que des critiques toutes générales de la décision attaquée, ou encore si elle ne fait que renvoyer aux moyens soulevés en première instance, elle ne satisfait pas aux exigences de l'<ref-law> et l'instance d'appel ne peut entrer en matière (arrêts 4A_290/2014 du 1er septembre 2014 consid. 3.1; 4A_397/2016 du 30 novembre 2016 consid. 3.1; 5A_577/2020 du 16 décembre 2020 consid. 5).
3.3.2. En l'espèce, la Cour d'appel a passé en revue l'intégralité de l'appel (sous let. G de l'état de fait), en particulier les passages figurant sous les points D.12, D.13 et D.14 du mémoire, dont la teneur est la suivante:
«D.12. En outre, le 4 novembre 2018, après son licenciement, l'appelant avait prévu de reprendre une activité lucrative indépendante dans le domaine de la gestion immobilière. Il s'agit là d'une activité qu'il avait déjà pratiquée avec succès, comme l'atteste son père dans le témoignage sous signature produit le 10 janvier 2020 (titre 5 [recte 4] de la réplique).
D.13. Il en découle qu'au moment de sa seconde incapacité de travail, le 6 novembre 2018, l'incapacité de travail par suite de cette rechute a eu pour conséquence une importante perte de gain.
D.14. Partant, le tribunal a exclu de manière arbitraire l'existence d'une rechute dans le cas d'espèce et, de surcroît, a violé l'<ref-law> respectivement les articles 1 et 2 CCAIJ».
Certes, il y est fait référence à une perte de gain, mais de manière vague, sans référence à l'argumentation développée par le premier juge et, apparemment, pour les besoins de la thèse dont le recourant a fait son cheval de bataille, à savoir l'existence d'une rechute. Dans ces circonstances, la conclusion selon laquelle l'appel ne comprenait pas de motivation suffisante concernant l'inexistence de cette perte de gain effective s'inscrit encore dans les limites d'une application non arbitraire de l'<ref-law>. On relèvera au passage que l'affirmation faite au point D.13 de l'appel ne peut être reliée à aucun allégué de la demande ou de la réplique, comme l'a pointé l'autorité précédente.
Ceci scelle le sort du recours dans la mesure où il faut en conclure que l'appel s'avérait bien irrecevable, sous l'angle restreint de l'arbitraire.
3.4. A toutes fins utiles, l'on observera encore que le second grief développé par le recourant n'est pas plus fondé que le précédent. Il s'emploie en effet à démontrer que la Cour d'appel aurait interprété arbitrairement l'art. 1 CCAIJ ( supra let. A.a). Or, à lire cette disposition précisant que l'incapacité de travail par suite de maladie doit avoir pour conséquence une perte de gain, on ne discerne pas en quoi il serait arbitraire de conclure à une assurance de dommages (cf. <ref-ruling> consid. 5.2.3). L'art. 2 CG que brandit le recourant ne lui est d'aucun secours. Que l'assurance soit appelée à «couvr[ir] (...) les conséquences économiques d'un événement assuré» qui est en l'occurrence «l'incapacité de travail consécutive à une maladie» ne suffit pas à classifier l'assurance contractée comme une assurance de dommages ou assurance de sommes (cf. <ref-ruling> consid. 5.2.4 p. 344).
Quant à savoir si le recourant a allégué et démontré avoir subi une perte de gain effective pendant la période pour laquelle il réclame des indemnités, l'on cherche vainement dans le recours la démonstration d'un arbitraire dans les constatations de l'autorité précédente qui a retenu que tel n'était pas le cas. Et bien que le sujet ne soit évoqué par personne, il ne saurait être question de le faire bénéficier d'une présomption de fait - que la jurisprudence applique dans certaines situations (<ref-ruling> consid. 3.2 et 3.3 et 141 III 241 consid. 3.2.3) - puisque son cas se présente sous un angle substantiellement différent: au terme de son contrat de travail, il avait recouvré sa pleine capacité de travail, mais se trouvait sans emploi; il ne s'était alors pas inscrit à l'assurance-chômage et n'avait pas davantage marqué sa volonté de reprendre une activité lucrative.
On relèvera enfin que l'assuré, dans ses écritures de première instance et d'appel, n'a pas contesté que l'assurance individuelle avait pris effet seulement le 13 décembre 2018 - et non pas déjà dès l'expiration de la couverture d'assurance collective (cf. HÄBERLI/HUSMANN, Krankentaggeld, versicherungs- und arbeitsrechtliche Aspekte, 2015, p. 197 n. 622, et THOMAS MATTIG, Freizügigkeit in der Krankentaggeldversicherung nach VVG, in Krankentaggeldversicherung: Arbeits- und versicherungsrechtliche Aspekte, [von Kaenel éd.] 2007, p. 101, qui évoquent une règle générale; cf. aussi, dans le même ouvrage, HANS-RUDOLF MÜLLER, Grundlagen der Krankentaggeldversicherung nach VVG, p. 40). Il a plaidé que l'état maladif l'empêchant de travailler dès le 6 novembre 2018 n'était qu'une rechute qui serait couverte par l'assurance collective, i.e par le régime gouvernant la première incapacité causée par la même maladie. Or, cette thèse est battue en brèche par l'art. 9 ch. 2 CG, lequel ne reconnaît un droit aux prestations subséquentes que si l'assuré souffrait d'une incapacité de travail au moment où les rapports de travail ont pris fin, et pour autant que l'incapacité persiste de manière ininterrompue en étant due à la même cause (cf. supra consid. 3.1).
4.
Le recours constitutionnel subsidiaire se révèle dès lors mal fondé et doit être rejeté, aux frais de son auteur (<ref-law>). Celui-ci versera à son adverse partie une indemnité à titre de dépens (art. 68 al. 1 et 2 LTF)

Par ces motifs, le Tribunal fédéral prononce :
1.
Le recours est rejeté.
2.
Le recourant supportera les frais judiciaires fixés à 2'000 fr.
3.
Le recourant versera à l'intimée une indemnité de 2'500 fr. à titre de dépens.
4.
Le présent arrêt est communiqué aux parties et au Tribunal cantonal du canton de Neuchâtel.
Lausanne, le 19 août 2021
Au nom de la Ire Cour de droit civil
du Tribunal fédéral suisse
La Présidente : Hohl
La Greffière : Monti