diff --git a/src/apps/golf/components/GolfGame.module.css b/src/apps/golf/components/GolfGame.module.css
index 960bcba..ff38050 100644
--- a/src/apps/golf/components/GolfGame.module.css
+++ b/src/apps/golf/components/GolfGame.module.css
@@ -175,8 +175,17 @@
}
.playerInfo.active {
- background: rgba(144, 238, 144, 0.2);
+ background: rgba(144, 238, 144, 0.25);
border: 1px solid #90ee90;
+ box-shadow: 0 0 12px rgba(144, 238, 144, 0.3);
+}
+
+.turnLabel {
+ font-size: 0.7rem;
+ color: #90ee90;
+ text-transform: uppercase;
+ letter-spacing: 0.05em;
+ font-weight: 500;
}
.score {
@@ -245,8 +254,15 @@
}
.card.selected {
- border: 3px solid #90ee90;
- transform: scale(1.05);
+ border: 3px solid #ffd700;
+ transform: scale(1.08);
+ box-shadow: 0 0 16px rgba(255, 215, 0, 0.5);
+ animation: selectedPulse 1.2s ease-in-out infinite;
+}
+
+@keyframes selectedPulse {
+ 0%, 100% { box-shadow: 0 0 12px rgba(255, 215, 0, 0.4); }
+ 50% { box-shadow: 0 0 24px rgba(255, 215, 0, 0.8); }
}
.card.clickable,
@@ -338,6 +354,17 @@
color: rgba(255, 255, 255, 0.5);
}
+.emptyPileReserved {
+ width: 80px;
+ height: 120px;
+ visibility: hidden;
+}
+
+.drawnCardWrapper .card {
+ border: 2px solid #ffd700;
+ box-shadow: 0 0 16px rgba(255, 215, 0, 0.4);
+}
+
.playerArea {
background: rgba(255, 255, 255, 0.1);
padding: 2rem;
@@ -397,6 +424,20 @@
transition: transform 0.1s ease;
}
+.actionButtonDisabled {
+ opacity: 0.4;
+ cursor: not-allowed;
+}
+
+.actionButtonDisabled:hover {
+ background: rgba(255, 255, 255, 0.2);
+ border-color: rgba(255, 255, 255, 0.3);
+}
+
+.actionButtonDisabled:active {
+ transform: none;
+}
+
.knockButton {
background: #ff6b6b;
color: white;
@@ -609,9 +650,9 @@
}
.card.selected {
- border: 3px solid #90ee90;
- transform: scale(1.08);
- box-shadow: 0 0 20px rgba(144, 238, 144, 0.5);
+ border: 3px solid #ffd700;
+ transform: scale(1.1);
+ box-shadow: 0 0 24px rgba(255, 215, 0, 0.6);
}
.cardRank {
@@ -641,6 +682,11 @@
height: 100px;
}
+ .emptyPileReserved {
+ width: 70px;
+ height: 100px;
+ }
+
.playerArea {
padding: 1rem;
width: 100%;
@@ -842,6 +888,11 @@
height: 80px;
}
+ .emptyPileReserved {
+ width: 55px;
+ height: 80px;
+ }
+
.cardGrid {
max-width: 130px;
gap: 0.6rem;
diff --git a/src/apps/golf/components/GolfGame.tsx b/src/apps/golf/components/GolfGame.tsx
index 2510ccb..33327ac 100644
--- a/src/apps/golf/components/GolfGame.tsx
+++ b/src/apps/golf/components/GolfGame.tsx
@@ -38,6 +38,7 @@ const GolfGame = ({ onGameIdChange, onPlayerIdChange, onPlayerNameChange, onConn
const {
gameState,
roomState,
+ playerId,
roomCode,
selectedCardIndex,
isInLobby,
@@ -345,17 +346,26 @@ const GolfGame = ({ onGameIdChange, onPlayerIdChange, onPlayerNameChange, onConn
Room: {gameState.id}
- {gameState.players.map((player, index) => (
-
- {getDisplayName(player)}
- {gameState.gamePhase === 'ended' && (
- Score: {player.score}
- )}
-
- ))}
+ {gameState.players.map((player, index) => {
+ const isActivePlayer = index === gameState.currentPlayerIndex && gameState.gamePhase === 'playing'
+ return (
+
+ {getDisplayName(player)}
+ {isActivePlayer && player.id !== playerId && (
+ their turn
+ )}
+ {isActivePlayer && player.id === playerId && (
+ your turn
+ )}
+ {gameState.gamePhase === 'ended' && (
+ Score: {player.score}
+ )}
+
+ )
+ })}
{currentGamePermalink && (
@@ -541,12 +551,16 @@ const GolfGame = ({ onGameIdChange, onPlayerIdChange, onPlayerNameChange, onConn
)}
- {gameState.drawnCard && isMyTurn && (
-
-
Drawn Card
- {renderCard(gameState.drawnCard, -2, true, false)}
-
- )}
+
+
{gameState.drawnCard && isMyTurn ? 'Drawn Card' : '\u00A0'}
+ {gameState.drawnCard && isMyTurn ? (
+
+ {renderCard(gameState.drawnCard, -2, true, false)}
+
+ ) : (
+
+ )}
+
@@ -573,7 +587,11 @@ const GolfGame = ({ onGameIdChange, onPlayerIdChange, onPlayerNameChange, onConn
>
) : (
<>
-