Faits:
Faits:
A. Le 1er juin 2000, X._ SA a engagé A._ en qualité de graphiste pour un salaire mensuel brut de 4'500 fr. Vu l'investissement réalisé pour ce poste, l'employée s'est engagée à travailler pendant une période minimale de deux ans. Dès le 1er février 2001, A._ a assumé la gestion du stock à raison de 60% de son temps de travail, tout en poursuivant son activité de graphiste pour le 40% restant. Son salaire mensuel brut a été porté à 6'000 fr.; en outre, l'employée avait droit à une prime de performance annuelle.
Le 10 mai 2001, lors d'un entretien avec son employeur, A._ s'est plainte de la surcharge engendrée par son double cahier des charges et a demandé à n'occuper à nouveau que son emploi de graphiste.
L'employée s'est trouvée en incapacité de travail totale à partir du 19 juin 2001, pour une durée estimée alors à trois semaines. Accédant aux demandes réitérées de son employeur, elle est néanmoins revenue sur son lieu de travail les 25 et 26 juin 2001 afin de former le nouveau gestionnaire de stock. A._ a alors rappelé par écrit à son employeur qu'elle se trouvait en arrêt maladie et qu'elle ne reviendrait travailler qu'une fois rétablie; elle s'est plainte également des conditions de travail et du comportement de B._, directeur de la société. Par télécopie du 27 juin 2001, X._ SA a reproché à son employée son incompétence, en particulier le non-respect de son cahier des charges et des échéances fixées, ainsi que des arrivées tardives systématiques et une mauvaise gestion du stock. Le 29 juin 2001, l'employeur a confirmé à A._ qu'elle reprendrait son poste initial de graphiste dès le 1er juillet 2001, avec une rémunération mensuelle de 5'300 fr., assortie d'un bonus de performance.
Comme le nouveau gestionnaire de stock ne parvenait pas à assumer ses tâches, X._ SA a demandé à sa collaboratrice, le 16 juillet 2001, de s'occuper à nouveau de la gestion du stock jusqu'à l'engagement d'un autre employé. A._ a accepté cette proposition. Toujours le 16 juillet 2001, elle a réclamé son salaire de juin 2001.
Le 23 juillet 2001, l'employée a repris le travail. A la même époque, le salaire de juin a été versé.
Le 24 juillet 2001, X._ SA a reproché à la travailleuse de ne pas observer les horaires du bureau. Par courrier du 31 juillet 2001, l'employeur a réitéré ses griefs à propos des arrivées tardives de sa collaboratrice et du retard accumulé dans l'accomplissement de certaines tâches; il l'a menacée d'un licenciement immédiat.
Le 7 août 2001, A._ a mis X._ SA en demeure de lui verser son salaire de juillet par 6'000 fr., correspondant au montant prévu pour les postes de gestionnaire de stock et de graphiste; elle réclamait également le paiement du bonus.
Le même jour, l'employeur a résilié le contrat de travail avec effet immédiat. Se référant à une série d'avertissements écrits et verbaux, il reprochait à A._ de graves violations de ses obligations contractuelles, notamment des arrivées tardives ainsi que des refus d'exécuter les travaux urgents et d'obéir aux instructions.
Le même jour, l'employeur a résilié le contrat de travail avec effet immédiat. Se référant à une série d'avertissements écrits et verbaux, il reprochait à A._ de graves violations de ses obligations contractuelles, notamment des arrivées tardives ainsi que des refus d'exécuter les travaux urgents et d'obéir aux instructions.
B. Le 4 octobre 2001, A._ a assigné X._ SA en paiement de 61'977 fr. plus intérêts. En cours de procédure, elle a amplifié ses conclusions et réclamé un montant de 126'271 fr.40, qui se décomposait comme suit:
- 13'048 fr.20 à titre d'heures supplémentaires;
- 2'025 fr. à titre de solde de salaire pour juillet 2001;
- 6'000 fr. à titre de salaire pour août 2001;
- 58'498 fr.20 à titre de salaire de septembre 2001 à mai 2002;
- 12'000 fr. à titre de bonus;
- 4'700 fr. à titre de vacances non prises;
- 12'000 fr. à titre d'indemnité pour licenciement abusif;
- 18'000 fr. à titre d'indemnité pour tort moral.
Par la suite, A._ a réduit ses prétentions à 122'365 fr.80 pour tenir compte d'un versement de l'employeur de 3'905 fr.60.
La Caisse Cantonale Genevoise de Chômage (CCGC) est intervenue dans la procédure et a fait valoir sa subrogation envers l'employeur à concurrence de la somme totale de 26'725 fr.45 avec intérêts.
Estimant que le licenciement immédiat de la demanderesse était fondé sur de justes motifs, X._ SA a conclu au rejet des conclusions de ses parties adverses.
Par jugement du 22 mai 2002 notifié le 3 mars 2003, le Tribunal de la juridiction des prud'hommes du canton de Genève a condamné l'employeur à payer à son ancienne collaboratrice la somme brute de 74'733 fr.75 avec intérêts à 5% dès le 8 août 2001, sous déduction du montant de 18'898 fr.05, ainsi que la somme nette de 12'000 fr. avec intérêts à 5% dès le 8 août 2001. Les juges de première instance ont condamné par ailleurs X._ SA à verser à la CCGC la somme nette de 18'895 fr.05, plus intérêts à 5% dès le 13 décembre 2001.
Statuant le 26 février 2004 sur appels de la défenderesse et de l'intervenante et appel incident de la demanderesse, la Cour d'appel de la juridiction des prud'hommes du canton de Genève a annulé la décision de première instance. Considérant, comme les premiers juges, que le licenciement immédiat était dénué de justes motifs, elle a condamné X._ SA à payer à A._ la somme brute de 77'595 fr.25, sous déduction de 26'725 fr.45, avec intérêts à 5% dès le 8 août 2001; le montant de 77'595 fr.25 se décompose en 61'050 fr.30 à titre de salaire jusqu'au 31 mai 2002, terme du contrat de deux ans, 8'250 fr. pour les bonus 2000 et 2001 et 8'294 fr.95 à titre d'indemnité pour les vacances non prises. La cour cantonale a accordé en outre à l'employée la somme nette de 12'000 fr., avec intérêts à 5% dès le 8 août 2001, à titre d'indemnité pour licenciement abusif. Enfin, elle a entièrement fait droit aux conclusions en paiement de la CCGC par 26'725 fr.45, plus intérêts à 5% dès le 13 décembre 2001.
Statuant le 26 février 2004 sur appels de la défenderesse et de l'intervenante et appel incident de la demanderesse, la Cour d'appel de la juridiction des prud'hommes du canton de Genève a annulé la décision de première instance. Considérant, comme les premiers juges, que le licenciement immédiat était dénué de justes motifs, elle a condamné X._ SA à payer à A._ la somme brute de 77'595 fr.25, sous déduction de 26'725 fr.45, avec intérêts à 5% dès le 8 août 2001; le montant de 77'595 fr.25 se décompose en 61'050 fr.30 à titre de salaire jusqu'au 31 mai 2002, terme du contrat de deux ans, 8'250 fr. pour les bonus 2000 et 2001 et 8'294 fr.95 à titre d'indemnité pour les vacances non prises. La cour cantonale a accordé en outre à l'employée la somme nette de 12'000 fr., avec intérêts à 5% dès le 8 août 2001, à titre d'indemnité pour licenciement abusif. Enfin, elle a entièrement fait droit aux conclusions en paiement de la CCGC par 26'725 fr.45, plus intérêts à 5% dès le 13 décembre 2001.
C. X._ SA forme un recours de droit public; elle conclut à l'annulation de l'arrêt attaqué.
A._ et la CCGC proposent toutes deux la confirmation de l'arrêt attaqué.
Invitée à se déterminer, la cour cantonale se réfère aux considérants de sa décision.
Parallèlement, X._ SA a interjeté un recours en réforme contre le même arrêt.
Le Tribunal fédéral considère en droit:
Le Tribunal fédéral considère en droit:
1. 1.1 Conformément à la règle générale prescrite à l'art. 57 al. 5 OJ, il convient d'examiner le recours de droit public avant le recours en réforme.
1.2 Le recours de droit public est ouvert contre une décision cantonale pour violation des droits constitutionnels des citoyens (art. 84 al. 1 let. a OJ).
La décision entreprise, qui est finale, n'est susceptible d'aucun autre moyen de droit sur le plan fédéral ou cantonal dans la mesure où la recourante se plaint d'une violation directe d'un droit de rang constitutionnel; la règle de la subsidiarité du recours de droit public est ainsi respectée (art. 84 al. 2 et art. 86 al. 1 OJ).
La recourante est personnellement touchée par l'arrêt attaqué, qui écarte ses conclusions libératoires, de sorte qu'elle a un intérêt personnel, actuel et juridiquement protégé à ce que cette décision n'ait pas été adoptée en violation de ses droits constitutionnels; en conséquence, la qualité pour recourir doit lui être reconnue (art. 88 OJ).
Interjeté en temps utile (art. 89 al. 1 OJ) dans la forme prévue par la loi (art. 90 al. 1 OJ), le présent recours est en principe recevable.
1.3 Saisi d'un recours de droit public, le Tribunal fédéral n'examine que les griefs d'ordre constitutionnel invoqués et suffisamment motivés dans l'acte de recours (art. 90 al. 1 let. b OJ; ATF 129 I 113 consid. 2.1 p. 120; 128 III 50 consid. 1c p. 53/54 et les arrêts cités).
1.3 Saisi d'un recours de droit public, le Tribunal fédéral n'examine que les griefs d'ordre constitutionnel invoqués et suffisamment motivés dans l'acte de recours (art. 90 al. 1 let. b OJ; ATF 129 I 113 consid. 2.1 p. 120; 128 III 50 consid. 1c p. 53/54 et les arrêts cités).
2. Invoquant l'art. 29 al. 2 Cst., la recourante reproche tout d'abord à la Cour d'appel d'avoir violé son droit d'être entendue en n'accédant pas à sa demande d'audition de C._; à son sens, ce témoignage aurait permis de démontrer la rupture du lien de confiance entre les parties et l'existence des nombreux avertissements oraux reçus par l'employée quant au caractère «potentiellement dangereux pour l'entreprise» de sa gestion du stock.
2.1 Le droit d'être entendu garanti par l'art. 29 al. 2 Cst. comprend le droit pour le justiciable d'obtenir qu'il soit donné suite à ses offres de preuves pertinentes (ATF 129 II 497 consid. 2.2 p. 505; 127 III 576 consid. 2c p. 578; 127 V 431 consid. 3a p. 436; 124 II 132 consid. 2b p. 137). Le juge peut toutefois renoncer au moyen de preuve offert par une partie lorsque le fait à prouver n'est pas important pour la solution du litige ou lorsque les preuves administrées lui ont permis de former sa conviction et que, procédant d'une manière non arbitraire à une appréciation anticipée de la preuve offerte en complément, il acquiert la certitude qu'elle ne pourrait l'amener à modifier son opinion (ATF 125 I 127 consid. 6c/cc in fine p. 135, 417 consid. 7b p. 430; 124 I 208 consid. 4a p. 211, 274 consid. 5b p. 285).
2.2 La Cour d'appel a jugé inutile d'entendre C._ en raison de la solution qu'elle a adoptée. A cet égard, elle a retenu que les justes motifs de licenciement invoqués par l'employeur consistaient principalement dans la qualité insatisfaisante du travail fourni comme gestionnaire de stock par l'intimée, qui ne parvenait pas à exécuter son cahier des charges. En droit, la juridiction cantonale a considéré que les reproches formulés par l'employeur à ce sujet, même conjugués à des arrivées tardives, ne permettaient pas de justifier une résiliation immédiate du contrat de travail; l'existence d'un seul avertissement clair n'y changeait rien.
Dès l'instant où les juges cantonaux estimaient que les reproches liés à la mauvaise gestion du stock ne justifiaient de toute manière pas un licenciement immédiat, le témoignage de C._ sur la réalité de ces griefs et les mises en garde orales adressées à l'employée n'était pas propre à apporter des éléments pertinents en l'espèce. La Cour d'appel n'a donc pas violé le droit d'être entendu de la recourante en rejetant la mesure probatoire demandée. Le premier moyen doit être écarté.
Dès l'instant où les juges cantonaux estimaient que les reproches liés à la mauvaise gestion du stock ne justifiaient de toute manière pas un licenciement immédiat, le témoignage de C._ sur la réalité de ces griefs et les mises en garde orales adressées à l'employée n'était pas propre à apporter des éléments pertinents en l'espèce. La Cour d'appel n'a donc pas violé le droit d'être entendu de la recourante en rejetant la mesure probatoire demandée. Le premier moyen doit être écarté.
3. En second lieu, la recourante est d'avis que la constatation selon laquelle l'intimée a reçu un seul avertissement avant son licenciement repose sur une appréciation arbitraire des preuves. Elle fait état à cet égard de deux pièces de son chargé d'appel, dont il ressort que deux autres mises en garde avaient été adressées à l'employée.
3.1 Selon la jurisprudence, une décision est arbitraire lorsqu'elle est manifestement insoutenable, méconnaît gravement une norme ou un principe juridique clair et indiscuté, ou encore heurte de manière choquante le sentiment de la justice et de l'équité. Il ne suffit pas que sa motivation soit insoutenable; encore faut-il que la décision apparaisse arbitraire dans son résultat. A cet égard, le Tribunal fédéral ne s'écarte de la solution retenue que si celle-ci apparaît insoutenable, en contradiction manifeste avec la situation effective, adoptée sans motif objectif et en violation d'un droit certain. Il n'y a pas arbitraire du seul fait qu'une autre solution paraît également concevable, voire même préférable (ATF 129 I 8 consid. 2.1 p. 9 et les arrêts cités).
En matière d'appréciation des preuves, il y a arbitraire lorsque l'autorité ne prend pas en compte, sans raison sérieuse, un élément de preuve propre à modifier la décision, lorsqu'elle se trompe manifestement sur le sens et la portée d'un tel élément, ou encore lorsqu'elle tire des constatations insoutenables des éléments recueillis (ATF 129 I 8 consid. 2.1; 127 I 38 consid. 2a p. 41; 124 I 208 consid. 4a).
3.2 Les pièces citées par la recourante sont deux courriers de B._ à l'intimée, l'un du 27 juin 2001 adressé par télécopie et l'autre du 24 juillet 2001. Ces documents avaient déjà été produits dans le chargé de pièces accompagnant la demande (pièces n° 5 et n° 13). Leur contenu a été résumé à la page 3, sous la lettre G et à la page 4, sous la lettre M de l'arrêt attaqué. Contrairement à ce que la recourante prétend, il ressort donc de l'état de fait cantonal que, à deux reprises, l'employeur avait reproché par écrit à l'employée son comportement et son incapacité, avant de lui adresser la lettre du 31 juillet 2001. La cour cantonale a qualifié ce dernier courrier de «seul avertissement, formulé clairement et contenant la menace d'un licenciement immédiat». La recourante ne conteste pas avoir, à cette occasion, évoqué pour la première fois la possibilité d'une résiliation pour justes motifs. Il apparaît ainsi que la Cour d'appel ne s'est pas livrée à une appréciation arbitraire des preuves. Au surplus, l'établissement des faits doit être distingué de l'interprétation des démarches effectuées par l'employeur avant le licenciement, qualifiées ou non d'«avertissements» déterminants dans le cadre de l'art. 337 CO. La portée à attribuer aux actes de l'employeur dans ce contexte est une question de droit, qui relève du recours en réforme et non du recours de droit public. Il s'ensuit que le grief tiré de la violation de l'art. 9 Cst. est également mal fondé.
Sur le vu de ce qui précède, le recours doit être rejeté.
4. La valeur litigieuse étant supérieure à 30'000 fr., la procédure n'est pas gratuite (art. 343 al. 2 et 3 CO). La recourante, qui succombe, prendra à sa charge les frais judiciaires (art. 156 al. 1 OJ). Elle n'aura en revanche pas à verser de dépens aux intimées, qui n'ont procédé ni l'une ni l'autre par un avocat et n'ont pas fait valoir de frais particuliers pour leur défense (art. 159 al. 2 OJ; art. 1 al. 2 et art. 2 du tarif pour les dépens alloués à la partie adverse dans les causes portées devant le Tribunal fédéral [RS 173.119.1]).
Par ces motifs, le Tribunal fédéral prononce:
Par ces motifs, le Tribunal fédéral prononce:
1. Le recours est rejeté.
1. Le recours est rejeté.
2. Un émolument judiciaire de 5'000 fr. est mis à la charge de la recourante.
2. Un émolument judiciaire de 5'000 fr. est mis à la charge de la recourante.
3. Le présent arrêt est communiqué en copie aux parties et à la Cour d'appel de la juridiction des prud'hommes du canton de Genève.
Lausanne, le 16 août 2004
Au nom de la Ire Cour civile
du Tribunal fédéral suisse
La Juge présidant: La Greffière: