Friday 20/March/2026 – 07:37 PM
revealed International Sports Court (CAS) on the merits of the final ruling in the case filed by the Pyramids Club against the decision not to deduct three points from Al-Ahly Club after not playing the summit match during the 2024-2025 season, confirming the validity of the decision issued by the Egyptian Clubs Association and rejecting the submitted appeal.
CAS publishes the rationale for its final ruling in the Pyramids and Zamalek dispute
In this case, Pyramids disputed Al-Ahly, the Club Association, the Football Association, and Zamalek Club, which announced its solidarity with Pyramids, while the Football Association officials considered themselves a passive party and did not send any pleading.
Pyramids: Al-Ahly’s absence from the Zamalek match was a voluntary decision that was previously announced and not a force majeure
Pyramids confirmed that the deduction of the three additional points represents a mandatory and cumulative penalty, and the association does not have the discretion to amend it once the withdrawal is proven, based on Article 17 (8) of the Competitions Regulations, which stipulates the obligation of the penalty.
The club stressed that Al-Ahly’s absence from the match was a voluntary and previously announced decision, which takes the incident out of the scope of “force majeure” or emergency circumstances, considering that the association tried to find a non-existent legal justification to justify its decision to grant clemency.
Pyramids pointed out that the association’s decisions are not immune from appeal before the Egyptian Federation’s Appeals Committee, considering that Article 63, which grants the association absolute sovereignty, is “legally flawed,” and violates the principles of international sports law that grant the injured party the right to litigation.
The club also cited the incident of Zamalek’s withdrawal in 2024, where the punishment was strictly applied, which reflects double standards and favoritism that affected the competition for the league title, and harmed the sporting and financial interests of Pyramids.




replaceOembeds();
function replaceOembeds() {
var allEmbeds = document.getElementsByTagName("OEMBED");
while (allEmbeds.length != 0) {
replaceOembedWithHtml(allEmbeds[0], extractLinkFromOembed(allEmbeds[0]));
allEmbeds = document.getElementsByTagName("OEMBED");
}
runYoutubeLazyLoad();
window.onscroll = function () {
loadAPI();
window.onscroll = null;
}
// loadfbApi();
}
function replaceOembedWithHtml(element, sourceData) {
if (sourceData.source.toLowerCase() === "youtube") {
var html="
';
replaceElementWithHtml(element, html);
} else if (sourceData.source.toLowerCase() === "instagram") {
var html="
';
replaceElementWithHtml(element, html);
} else if (sourceData.source.toLowerCase() === "twitter") {
var html="
';
replaceElementWithHtml(element, html);
} else if (sourceData.source.toLowerCase() === "facebook") {
var html="
'
replaceElementWithHtml(element, html);
} else {
replaceElementWithHtml(element, "");
}
}
function extractLinkFromOembed(element) {
return getUrlSource(element.getAttribute("url"));
}
function getUrlSource(url) {
var ytRegex = /http(?:s?):\/\/(?:www\.)?youtu(?:be\.com\/watch\?v=|\.be\/)([\w\-\_]*)(&(amp;)?[\w\?=]*)?/;
var instaRegex = /(https?:\/\/www\.)?instagram\.com(\/p\/(\w+)\/?)/;
var twitterRegex = /twitter\.com\/.*\/status(?:es)?\/([^\/\?]+)/;
var fbRegex = /^https?:\/\/www\.facebook\.com.*\/(video(s)?|watch|story|posts)(\.php?|\/).+$/;
if (ytRegex.test(url)) {
return {
source: "Youtube",
url: url,
id: ytRegex.exec(url)[1]
};
}
if (instaRegex.test(url)) {
return {
source: "Instagram",
url: url,
id: instaRegex.exec(url)[3]
};
}
if (twitterRegex.test(url)) {
return {
source: "Twitter",
url: url,
id: twitterRegex.exec(url)[1]
};
}
if (fbRegex.test(url)) {
return {
source: "Facebook",
url: url,
id: fbRegex.exec(url)[1]
};
}
return {
source: "Unknown",
url: url,
id: ""
};
}
function replaceElementWithHtml(element, html) {
var str = html;
var Obj = element; //any element to be fully replaced
if (Obj.outerHTML) { //if outerHTML is supported
Obj.outerHTML = str; ///it's simple replacement of whole element with contents of str var
} else { //if outerHTML is not supported, there is a weird but crossbrowsered trick
var tmpObj = document.createElement("div");
tmpObj.innerHTML = '';
ObjParent = Obj.parentNode; //Okey, element should be parented
ObjParent.replaceChild(tmpObj, Obj); //here we placing our temporary data instead of our target, so we can find it then and replace it into whatever we want to replace to
ObjParent.innerHTML = ObjParent.innerHTML.replace('
', str);
}
}
function loadfbApi() {
var js = document.createElement('script');
js.src="https://connect.facebook.net/en_US/sdk.js#xfbml=1&version=v3.2";
document.body.appendChild(js);
}
function runYoutubeLazyLoad() {
/// youtube lazyload
var youtube = document.querySelectorAll(".youtube");
for (var i = 0; i < youtube.length; i++) {
var source = "https://img.youtube.com/vi/" + youtube[i].dataset.embed +
"/0.jpg";
var image = new Image();
image.src = "/themes/cairo2/assets/images/no.jpg";
image.classList.add('lazyload');
image.setAttribute("data-src", source);
image.setAttribute("alt", "youtube");
image.addEventListener("load", function () {
youtube[i].appendChild(image);
}(i));
youtube[i].addEventListener("click", function () {
var iframe = document.createElement("iframe");
iframe.setAttribute("frameborder", "0");
iframe.setAttribute("allowfullscreen", "");
iframe.setAttribute("src", "https://www.youtube.com/embed/" + this.dataset
.embed + "?rel=0&showinfo=0&autoplay=1");
this.innerHTML = "";
this.appendChild(iframe);
});
};
}








