- {isFrozen
- ? "Les gloires du podium ont été attribuées automatiquement au début du Tribunal."
- : "Au début du Tribunal, les scores seront figés et le podium recevra des gloires automatiquement — aucun Archonte n'a besoin d'intervenir."}
-
+ {showRanking && (
+
+
+
+
Classement
+
+
+
+
+ {isFrozen && (
+
+ Les scores sont figés depuis le début du Tribunal.
+
+ {isFrozen
+ ? "Les gloires du podium ont été attribuées automatiquement au début du Tribunal."
+ : "Au début du Tribunal, les scores seront figés et le podium recevra des gloires automatiquement — aucun Archonte n'a besoin d'intervenir."}
+
+
+
+
+ )}
);
}
diff --git a/src/app/icare/icarus-game.tsx b/src/app/icare/icarus-game.tsx
index 6e3b388..8b3826a 100644
--- a/src/app/icare/icarus-game.tsx
+++ b/src/app/icare/icarus-game.tsx
@@ -175,10 +175,19 @@ export function IcarusGame({ onFinish }: { onFinish: (score: number) => void })
const ctx = canvas.getContext("2d");
if (!ctx) return;
+ // "Contain" dans le conteneur (largeur ET hauteur, contrairement à avant
+ // où seule la largeur comptait) : nécessaire en plein écran, où la
+ // hauteur disponible varie et n'est plus déduite de la largeur.
function resize() {
const dpr = window.devicePixelRatio || 1;
- const cssWidth = container!.clientWidth;
- const cssHeight = cssWidth * (VIEWPORT_HEIGHT / VIEWPORT_WIDTH);
+ const availableWidth = container!.clientWidth;
+ const availableHeight = container!.clientHeight;
+ let cssWidth = availableWidth;
+ let cssHeight = (cssWidth * VIEWPORT_HEIGHT) / VIEWPORT_WIDTH;
+ if (cssHeight > availableHeight) {
+ cssHeight = availableHeight;
+ cssWidth = (cssHeight * VIEWPORT_WIDTH) / VIEWPORT_HEIGHT;
+ }
canvas!.width = cssWidth * dpr;
canvas!.height = cssHeight * dpr;
canvas!.style.width = `${cssWidth}px`;
@@ -283,38 +292,38 @@ export function IcarusGame({ onFinish }: { onFinish: (score: number) => void })
typeof window !== "undefined" && window.matchMedia("(prefers-reduced-motion: reduce)").matches;
return (
-