Faits :
A.
Le 9 janvier 2017, le Département fédéral des finances (DFF) a ouvert une procédure de droit pénal administratif contre les responsables de la société A._ SA, procédure étendue par la suite à B._, pour des soupçons d'activité d'intermédiaire financier exercée sans autorisation. Le 13 avril 2017, le DFF a ordonné le séquestre de deux comptes ouverts au nom de A._ SA dans les livres Postfinance SA, pour près de 3 millions de francs. Une demande de levée partielle du séquestre a été rejetée, décision confirmée par la Tribunal fédéral (cf. arrêt 1B_554/2018 du 19 avril 2018).
B.
Par jugement du 17 juin 2020, la Cour des affaires pénales du Tribunal pénal fédéral a reconnu B._ coupable d'exercice sans autorisation de l'activité d'intermédiaire financier, intentionnel et par négligence (ch. I du dispositif); elle l'a condamné à une peine pécuniaire de 130 jours-amende à 200 fr. par jour avec sursis ainsi qu'à une amende de 15'000 fr. ( ch. II), et prononcé à son encontre une créance compensatrice de CHF 3'000.00 fr. en faveur de la Confédération (ch. III); elle a maintenu le séquestre sur l'un des deux comptes à hauteur de 32'839.30 fr. en vue de l'exécution de la créance compensatrice et du paiement de l'amende et des frais de procédure, et elle a levé les séquestres pour le surplus sur les deux comptes (ch. IV). Le jugement a fait l'objet d'un appel de la part de B._ et de A._ SA, ainsi que d'un appel joint du DFF.
C.
Le 4 février 2021, l'avocat des prévenus a adressé au DFF une demande de levée des séquestres, faisant valoir que le DFF n'avait pas contesté dans son appel joint le ch. IV du dispositif du jugement du 17 juin 2020, ni requis le maintien des séquestres. Cette demande a été transmise à la Cour d'appel du TPF qui l'a rejetée par ordonnance du juge président du 29 mars 2021, considérant que le ch. IV en question, portant sur les séquestres, n'était pas entré en force. Le DFF n'avait pas expressément attaqué ce point dans son appel joint, mais concluait au prononcé d'une confiscation de 807'041 fr. et de créances compensatrices de 490'552 fr. et 1'755'472 USD. Compte tenu du lien étroit entre la confiscation et les séquestres, ce dernier point faisait aussi l'objet de l'appel du DFF.
D.
Agissant par la voie du recours en matière pénale, A._ SA demande au Tribunal fédéral d'annuler l'ordonnance du 29 mars 2021, de constater que le ch. IV du dispositif du jugement du 17 juin 2020 est entré en force et d'ordonner au DFF de lever des séquestres, sous réserve de 32'839.30 fr.; subsidiairement, elle conclut à ce que le Tribunal fédéral ordonne lui-même la levée requise.
Considérant en droit :
1.
L'ordonnance attaquée a été rendue en application de l'art. 438 CPP disposition qui permet à l'autorité pénale de constater l'entrée en force du jugement. Il s'agit d'une décision en matière pénale au sens de l'art. 78 al. 1 LTF et, en dépit de son caractère incident, le recours paraît recevable au sens de l'art. 93 al. 1 let. a LTF, dans la mesure où le séquestre des avoirs de la recourante se trouve maintenu (ATF 128 I 129 consid. 1). La recourante a qualité pour recourir (art. 81 al. 1 LTF).
2.
Invoquant les art. 399 al. 4 let. e, 402 et 404 al. 1 CPP, la recourante relève que la déclaration d'appel doit indiquer, clairement et définitivement, les parties du jugement qui sont contestées, que l'appel suspend la force de chose jugée du jugement de première instance dans les limites des points contestés et que la juridiction d'appel limite son examen à ces points. En l'occurrence, le jugement de première instance ordonne la levée des séquestres sous réserve de 32'839.30 fr., et la déclaration d'appel du DFF ne contient ni grief, ni conclusion sur ce point. Or, le séquestre constituerait une conséquence accessoire du jugement et devait être attaqué de la même manière. Au contraire, la créance compensatrice et la confiscation feraient partie des mesures ordonnées dans le jugement (art. 399 al. 4 let. c CPP), soumise à un régime juridique différent. La Cour d'appel ne pouvait donc assimiler le séquestre à ces mesures. La recourante considère enfin que les conditions d'un séquestre (au sens des art. 263 al. 1 et 267 al. 1 CPP) ne seraient pas réunies, le jugement de première instance ayant retenu que le lien entre les infractions et les gains réalisés n'était pas établi, sauf pour 3'000 fr. représentant les frais d'octroi d'une autorisation.
La constatation d'entrée en force prévue à l'art. 438 CPP a pour but de lever tout doute sur la date et la portée de l'entrée en force d'une décision. Elle peut intervenir après le prononcé d'un jugement de première instance, après l'expiration du délai d'appel ou lorsque celui-ci a été retiré ou rejeté (cf. art. 437 al. 1 let. a - c CPP). Dans ce cas, la constatation de l'entrée en force appartient à l'autorité pénale qui a rendu le jugement (art. 438 al. 1 CPP). Lorsque le jugement de première instance fait l'objet d'un appel, une constatation d'entrée en force peut également être obtenue pour les points du jugement qui ne sont pas contestés. Dans ce cas, malgré le texte de l'art. 438 al. 3 CPP, la décision en revient à l'instance d'appel. En effet, c'est à cette dernière qu'il appartient de définir la recevabilité et la portée de l'appel dont elle est saisie (PERRIN/ROTEN, in: Commentaire Romand CPP, 2ème éd. 2019, n° 3 ad art. 438). Cette compétence n'est du reste pas contestée par les parties. Dans ce contexte, si l'appel se limite à des points secondaires (frais ou prétentions civiles), l'instance d'appel peut être amenée à constater la force de chose jugée sur les points principaux (culpabilité et peine). En revanche, lorsque l'appel porte sur un point principal tel que la culpabilité, l'instance d'appel pourrait être amenée à modifier la peine et les points secondaires, de sorte qu'aucune attestation d'entrée en force ne doit être délivrée (KISTLER VIANIN, Commentaire Romand CPP, 2ème éd. 2019, n° 4 ad art. 402).
Selon l'art. 402 CPP, l'appel suspend la force de chose jugée du jugement attaqué dans les limites des points contestés. L'appel a effet suspensif de plein droit; durant le délai d'appel - ou d'appel joint -, cet effet s'étend à l'ensemble du jugement attaqué; une fois l'appel interjeté, l'effet suspensif est limité aux points contestés (KISTLER VIANIN, op. cit., n° 1 ad art. 402).
2.1. Pour la recourante, les séquestres constituent une conséquence accessoire du jugement au sens de l'art. 399 al. 4 let. e CPP, et devaient donc nécessairement faire l'objet de conclusions spécifiques dans la déclaration d'appel; il n'y aurait pas d'assimilation possible avec la confiscation ou la créance compensatrice, qui constituent des mesures au sens de l'art. 399 al. 4 let. c CPP. L'argument n'est toutefois pas pertinent.
En vertu de l'art. 399 CPP, la déclaration d'appel doit indiquer si le jugement est attaqué dans son ensemble ou seulement sur certaines parties. Dans ce dernier cas, l'appelant est tenu de mentionner, dans sa déclaration d'appel, de manière définitive, sur quelles parties porte l'appel. L'art. 399 al. 4 CPP énumère, à ses lettres a à g, les parties du jugement qui peuvent être attaquées séparément. L'appel peut ainsi notamment porter sur la question de la culpabilité, le cas échéant en rapport avec chacun des actes (let. a), sur la quotité de la peine (let. b) ou sur les mesures qui ont été ordonnées (let. c), ainsi que les conséquences accessoires du jugement (let. e). Selon l'art. 404 al. 1 CPP, la juridiction d'appel n'examine que les points attaqués du jugement de première instance. Elle revoit ces points avec un plein pouvoir d'examen (art. 398 al. 2 CPP), sans être liée par les motifs invoqués par les parties ni par leurs conclusions (sauf en matière civile; art. 391 al. 1 CPP). Elle peut revoir les points qui ne sont pas contestés, seulement si leur modification s'impose à la suite de l'admission de l'appel ou de l'appel joint (ATF 144 IV 383 consid. 1.1 et les références citées). Par ailleurs, les mesures provisoires ne sont pas suspendues par le dépôt d'un appel; il en va ainsi de la détention ou des séquestres ordonnés (KISTLER VIANIN, op. cit., n° 5 ad art. 402). En outre, la direction de la procédure de la juridiction d'appel peut au besoin ordonner elle-même ces mesures (art. 388 CPP).
2.2. En l'occurrence, l'appel du DFF porte sur une confiscation, à hauteur de 807'041 fr., ainsi que des créances compensatrices de 490'552 fr. et 1'755'472 USD, soit des montants nettement plus élevés que ceux prononcés en première instance. Même si les conclusions du DFF ne portent pas sur le maintien des séquestres, ces mesures apparaissent à l'évidence nécessaires pour garantir l'exécution du jugement d'appel au cas où les conclusions du DFF seraient accueillies, totalement ou partiellement. Comme cela est relevé ci-dessus, lorsque l'appel porte sur un point principal et que, par ce biais, l'instance d'appel pourrait être amenée à modifier les points secondaires, une attestation d'entrée en force ne peut pas être délivrée. La décision attaquée apparaît ainsi conforme au droit fédéral et le grief doit être rejeté.
2.3. Le litige porte exclusivement sur la délivrance d'une attestation d'entrée en force au sens de l'art. 438 CPP. Dans ce cadre, il n'y a pas lieu d'examiner si les conditions d'un maintien du séquestre sont réunies au sens des art. 263 ss CPP. L'argument de la recourante sur ce point va au-delà de l'objet du litige et est donc irrecevable.
3.
Sur le vu de ce qui précède, le recours est rejeté dans la mesure où il est recevable. Conformément à l'art. 66 al. 1 LTF, les frais judiciaires sont mis à la charge de la recourante qui succombe. Il n'est pas alloué de dépens (art. 68 al. 3 LTF).
Par ces motifs, le Tribunal fédéral prononce :
1.
Le recours est rejeté dans la mesure où il est recevable.
2.
Les frais judiciaires, arrêtés à 3'000 fr., sont mis à la charge de la recourante. Il n'est pas alloué de dépens.
3.
Le présent arrêt est communiqué au mandataire de la recourante, au Département fédéral des finances (DFF), au Ministère public de la Confédération et au Tribunal pénal fédéral, Cour d'appel, Juge président.
Lausanne, le 20 août 2021
Au nom de la Ire Cour de droit public
du Tribunal fédéral suisse
Le Président : Kneubühler
Le Greffier : Kurz