From aae651aa8bc7fa99a73e5a9826e8386776d5bf60 Mon Sep 17 00:00:00 2001 From: Thomas Fauve-Piot Date: Tue, 24 Mar 2026 21:02:48 +0100 Subject: [PATCH] Front done --- Transcendence/srcs/frontend/src/200.jpg | Bin 31128 -> 0 bytes Transcendence/srcs/frontend/src/game.css | 476 ++++++++++++++++++---- Transcendence/srcs/frontend/src/index.css | 12 - 3 files changed, 400 insertions(+), 88 deletions(-) delete mode 100644 Transcendence/srcs/frontend/src/200.jpg diff --git a/Transcendence/srcs/frontend/src/200.jpg b/Transcendence/srcs/frontend/src/200.jpg deleted file mode 100644 index 276550c382b1f201cc5b857aa260ff90d74ba125..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31128 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 V+K(*HsY9kU^T-YIA^6|?{{!c8?IHjG diff --git a/Transcendence/srcs/frontend/src/game.css b/Transcendence/srcs/frontend/src/game.css index 423c46b..2ecd58b 100644 --- a/Transcendence/srcs/frontend/src/game.css +++ b/Transcendence/srcs/frontend/src/game.css @@ -159,77 +159,6 @@ body { .title span { will-change: transform; } -/* ============================================ - MENU - ============================================ */ - -.menu { - position: fixed; - top: var(--spacing-lg); - left: 50px; - - display: flex; - flex-direction: column; - gap: var(--spacing-lg); - - z-index: var(--z-menu); -} - -.menu__item { - background: var(--color-surface); - border-radius: var(--radius-lg); - border: 1px solid var(--color-surface-light); - padding: var(--spacing-sm) var(--spacing-md); - font-size: var(--font-size-md); - cursor: pointer; - transition: all var(--transition-fast); - text-align: center; -} - -.menu__item:hover { - background: var(--color-surface-light); - font-size: var(--font-size-lg); -} - -.menu__item--active { - background: var(--color-primary); - border-color: var(--color-primary); -} - -/* ============================================ - GAME - ============================================ */ - -.game { - position: fixed; - top: var(--spacing-lg); - right: 50px; - display: flex; - flex-direction: column; -} - -.game__item { - background: var(--color-surface); - color: var(--color-text); - border-radius: var(--radius-lg); - border: 1px solid var(--color-surface-light); - padding: var(--spacing-sm) var(--spacing-md); - font-size: var(--font-size-md); - cursor: pointer; - transition: all var(--transition-fast); - text-align: center; -} - -.game__item:hover { - background: var(--color-surface-light); - font-size: var(--font-size-lg); -} - -.game__item--active { - background: var(--color-primary); - border-color: var(--color-primary); -} - /* ============================================ PAGES ============================================ */ @@ -253,6 +182,7 @@ body { background: var(--color-surface); color: var(--color-text); border: 1px solid var(--color-surface-light); + border-color: #fda725; padding: var(--spacing-sm) var(--spacing-md); font-size: var(--font-size-md); cursor: pointer; @@ -270,6 +200,84 @@ body { border-color: var(--color-primary); } +/* ============================================ + MENU + ============================================ */ + +.menu { + position: fixed; + top: var(--spacing-lg); + left: 50px; + + display: flex; + flex-direction: column; + gap: var(--spacing-lg); + + z-index: var(--z-menu); +} + +.menu__item { + background: var(--color-surface); + color: var(--color-text); + border: 1px solid var(--color-surface-light); + border-radius: var(--radius-lg); + border-color: #fda725; + padding: var(--spacing-sm) var(--spacing-md); + font-size: var(--font-size-md); + cursor: pointer; + transition: all var(--transition-fast); + text-align: center; +} + +.menu__item:hover { + background: var(--color-surface-light); + font-size: var(--font-size-lg); +} + +.menu__item--active { + background: var(--color-primary); + border-color: var(--color-primary); +} + +/* ============================================ + GAME + ============================================ */ + + +.game { + position: fixed; + top: var(--spacing-lg); + right: 50px; + + display: flex; + flex-direction: column; + gap: var(--spacing-lg); + + z-index: var(--z-menu); +} + +.game__item { + background: var(--color-surface); + color: var(--color-text); + border: 1px solid var(--color-surface-light); + border-radius: var(--radius-lg); + border-color: #fda725; + padding: var(--spacing-sm) var(--spacing-md); + font-size: var(--font-size-md); + cursor: pointer; + transition: all var(--transition-fast); + text-align: center; +} + +.game__item:hover { + background: var(--color-surface-light); + font-size: var(--font-size-lg); +} + +.game__item--active { + background: var(--color-primary); + border-color: var(--color-primary); +} /* ============================================ BUTTONS @@ -298,7 +306,7 @@ body { } .btn--primary { - background: var(--color-primary); + background: var(--color-surface); color: var(--color-text); } @@ -307,7 +315,7 @@ body { } .btn--secondary { - background: var(--color-surface-light); + background: var(--color-surface); color: var(--color-text); } @@ -583,7 +591,7 @@ body { border-radius: var(--radius-full); border: 3px solid var(--color-text); box-shadow: var(--shadow-md); - background: var(--color-surface); + background: var(--color-surface-light); align-self: center; } @@ -721,8 +729,8 @@ body { .friends__tab { flex: 1; padding: var(--spacing-sm); - background: var(--color-surface-light); - border: 1px solid var(--color-surface-light); + background: var(--color-surface); + border: 1px solid var(--color-surface); color: var(--color-text); cursor: pointer; font-size: var(--font-size-sm); @@ -801,3 +809,319 @@ body { color: var(--color-text-muted); padding: var(--spacing-lg); } + +/* ============================================ + GAME ROOM WINDOW + ============================================ */ + +.gameroom-window { + width: 800px; + height: 900px; +} + +.gameroom__tabs { + display: flex; + gap: var(--spacing-xs); + margin-bottom: var(--spacing-sm); +} + +.gameroom__tab { + flex: 1; + padding: var(--spacing-sm); + background: var(--color-surface); + border: 1px solid var(--color-surface-light); + color: var(--color-text); + cursor: pointer; + font-size: var(--font-size-sm); + transition: all var(--transition-fast); +} + +.gameroom__tab:hover { + background: var(--color-surface-light); +} + +.gameroom__tab--active { + background: var(--color-primary); + border-color: var(--color-primary); +} + +.gameroom__content { + display: flex; + flex-direction: column; + flex: 1; + overflow: hidden; +} + +.gameroom__create { + display: flex; + flex-direction: column; + gap: var(--spacing-sm); + margin-bottom: var(--spacing-sm); +} + +.gameroom__list { + flex: 1; + overflow-y: auto; + display: flex; + flex-direction: column; + gap: var(--spacing-sm); +} + +.gameroom__item { + display: flex; + align-items: center; + gap: var(--spacing-sm); + padding: var(--spacing-sm); + background: var(--color-surface); + border-radius: var(--radius-md); +} + +.gameroom__name { + flex: 1; + font-size: var(--font-size-md); + font-weight: 500; +} + +.gameroom__players { + font-size: var(--font-size-sm); + color: var(--color-text-muted); + padding: var(--spacing-xs) var(--spacing-sm); + background: var(--color-surface-light); + border-radius: var(--radius-sm); +} + +.gameroom__actions { + display: flex; + gap: var(--spacing-xs); +} + +.gameroom__actions .btn { + padding: var(--spacing-xs) var(--spacing-sm); + font-size: var(--font-size-sm); +} + +.gameroom__lobby { + display: flex; + flex-direction: column; + flex: 1; + gap: var(--spacing-sm); +} + +.gameroom__lobby-title { + margin: 0; + font-size: var(--font-size-lg); + text-align: center; + color: var(--color-success); +} + +.gameroom__player-list { + flex: 1; + overflow-y: auto; + display: flex; + flex-direction: column; + gap: var(--spacing-sm); + background: var(--color-surface); + border-radius: var(--radius-md); + padding: var(--spacing-sm); +} + +.gameroom__player { + display: flex; + align-items: center; + gap: var(--spacing-sm); + padding: var(--spacing-xs) var(--spacing-sm); + background: var(--color-surface-light); + border-radius: var(--radius-sm); +} + +.gameroom__player-avatar { + width: 32px; + height: 32px; + border-radius: var(--radius-full); + object-fit: cover; + border: 2px solid var(--color-surface-light); +} + +.gameroom__player-name { + flex: 1; + font-size: var(--font-size-md); +} + +.gameroom__player-stats { + display: flex; + flex-direction: column; + align-items: flex-end; + gap: 2px; +} + +.gameroom__player-score { + font-size: var(--font-size-sm); + color: var(--color-success); + font-weight: 500; +} + +.gameroom__player-total { + font-size: var(--font-size-sm); + color: var(--color-text-muted); +} + +.gameroom__empty { + text-align: center; + color: var(--color-text-muted); + padding: var(--spacing-lg); +} + +/* ============================================ + GAME - JEU DU PENDU/DESSIN + ============================================ */ + +.gameroom__lobby-buttons { + display: flex; + gap: var(--spacing-sm); + margin-top: auto; +} + +.gameroom__lobby-buttons .btn { + flex: 1; +} + +.gameroom__game { + display: flex; + flex-direction: column; + gap: var(--spacing-sm); + flex: 1; +} + +.gameroom__game-info { + text-align: center; +} + +.gameroom__drawer-info { + font-size: var(--font-size-md); + color: var(--color-text-muted); + padding: var(--spacing-xs); +} + +.gameroom__scores-display { + font-size: var(--font-size-sm); + color: var(--color-success); + padding: var(--spacing-xs); + background: var(--color-surface); + border-radius: var(--radius-sm); + margin-top: var(--spacing-xs); +} + +.gameroom__drawer-info--winner { + color: var(--color-success); + font-weight: bold; + animation: pulse 0.5s ease-in-out 3; +} + +@keyframes pulse { + 0%, 100% { transform: scale(1); } + 50% { transform: scale(1.05); } +} + +.gameroom__word-display { + font-size: var(--font-size-xl); + font-family: monospace; + text-align: center; + letter-spacing: 8px; + padding: var(--spacing-md); + background: var(--color-surface); + border-radius: var(--radius-md); + min-height: 60px; + display: flex; + align-items: center; + justify-content: center; + color: var(--color-success); +} + +.gameroom__canvas-container { + display: flex; + justify-content: center; +} + +.gameroom__canvas { + background: var(--color-surface-light); + border-radius: var(--radius-md); + cursor: crosshair; + border: 2px solid var(--color-surface-light); +} + +.gameroom__draw-tools { + display: flex; + gap: var(--spacing-sm); + justify-content: center; + align-items: center; +} + +.gameroom__color-picker { + width: 40px; + height: 32px; + border: none; + border-radius: var(--radius-sm); + cursor: pointer; + background: transparent; +} + +.gameroom__word-input-container, +.gameroom__guess-container { + display: flex; + gap: var(--spacing-sm); +} + +.gameroom__word-input-container .input, +.gameroom__guess-container .input { + flex: 1; +} + +.gameroom__guess-container .input:disabled { + opacity: 0.5; + cursor: not-allowed; +} + +.gameroom__guess-container .btn:disabled { + opacity: 0.5; + cursor: not-allowed; +} + +.gameroom__guess-history { + flex: 1; + min-height: 60px; + max-height: 100px; + overflow-y: auto; + background: var(--color-surface); + border-radius: var(--radius-md); + padding: var(--spacing-sm); + display: flex; + flex-direction: column; + gap: var(--spacing-xs); +} + +.gameroom__guess-item { + font-size: var(--font-size-sm); + padding: var(--spacing-xs) var(--spacing-sm); + border-radius: var(--radius-sm); +} + +.gameroom__guess-item--success { + background: rgba(60, 255, 1, 0.2); + color: var(--color-success); +} + +.gameroom__guess-item--fail { + background: rgba(255, 77, 77, 0.2); + color: var(--color-error); +} + +.gameroom__game-buttons { + display: flex; + gap: var(--spacing-sm); + margin-top: var(--spacing-sm); +} + +.gameroom__game-buttons .btn { + flex: 1; +} + diff --git a/Transcendence/srcs/frontend/src/index.css b/Transcendence/srcs/frontend/src/index.css index 841a3ca..87d2440 100644 --- a/Transcendence/srcs/frontend/src/index.css +++ b/Transcendence/srcs/frontend/src/index.css @@ -134,18 +134,6 @@ body { MENU ============================================ */ -/* .menu { - position: fixed; - top: 0; - left: 50px; - padding: 0; - margin: 0; - z-index: var(--z-menu); - display: flex; - flex-direction: column; - gap: var(--spacing-xs); -} */ - .menu { position: fixed; top: var(--spacing-lg);