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 ) : ( <> -