| * { margin: 0; padding: 0; box-sizing: border-box; } | |
| body { | |
| background: #0a0a1a; font-family: 'Segoe UI', sans-serif; | |
| display: flex; justify-content: center; align-items: center; | |
| min-height: 100vh; overflow: hidden; user-select: none; color: #fff; | |
| } | |
| #title-screen { | |
| position: fixed; inset: 0; background: #0a0a1a; | |
| display: flex; justify-content: center; align-items: center; | |
| z-index: 500; transition: opacity 0.6s; overflow: hidden; | |
| } | |
| #title-screen.hidden { opacity: 0; pointer-events: none; } | |
| #demo-container { | |
| position: absolute; transform: scale(1.3); opacity: 0.4; | |
| pointer-events: none; z-index: 1; filter: blur(0.5px); | |
| } | |
| #title-overlay { | |
| position: absolute; inset: 0; background: rgba(10, 10, 26, 0.1); z-index: 2; | |
| } | |
| #title-content { | |
| position: relative; z-index: 3; display: flex; flex-direction: column; align-items: center; | |
| } | |
| #title-logo { | |
| font-size: 80px; font-weight: 900; | |
| background: linear-gradient(135deg, #ff6b6b, #ffd93d, #6bcb77, #4d96ff); | |
| -webkit-background-clip: text; -webkit-text-fill-color: transparent; | |
| letter-spacing: 12px; margin-bottom: 16px; animation: titlePulse 3s ease-in-out infinite; | |
| } | |
| @keyframes titlePulse { 50% { transform: scale(1.04); filter: brightness(1.2); } } | |
| .btn { | |
| padding: 16px 40px; margin: 10px; font-size: 18px; width: 260px; | |
| background: linear-gradient(135deg, #4d96ff, #6bcb77); | |
| color: #fff; border: none; border-radius: 30px; cursor: pointer; | |
| font-weight: 700; letter-spacing: 2px; transition: transform 0.2s, box-shadow 0.2s; | |
| } | |
| .btn:hover { transform: scale(1.06); box-shadow: 0 0 30px rgba(77, 150, 255, 0.5); } | |
| .btn.vs { background: linear-gradient(135deg, #ff6b6b, #ffd93d); } | |
| .btn.vs:hover { box-shadow: 0 0 30px rgba(255, 107, 107, 0.5); } | |
| .btn.vs-turn { background: linear-gradient(135deg, #9b59b6, #e74c3c); } | |
| .btn.vs-turn:hover { box-shadow: 0 0 30px rgba(155, 89, 182, 0.5); } | |
| #sound-toggle { | |
| position: fixed; top: 16px; right: 16px; width: 44px; height: 44px; | |
| border-radius: 50%; background: rgba(255, 255, 255, 0.1); | |
| border: 1px solid rgba(255, 255, 255, 0.2); color: #fff; font-size: 20px; | |
| cursor: pointer; display: flex; align-items: center; justify-content: center; | |
| z-index: 600; transition: background 0.2s; | |
| } | |
| #sound-toggle:hover { background: rgba(255, 255, 255, 0.2); } | |
| #main-wrapper { | |
| display: flex; flex-direction: column; align-items: center; | |
| opacity: 0; transition: opacity 0.5s; position: relative; z-index: 100; gap: 20px; | |
| } | |
| #main-wrapper.show { opacity: 1; } | |
| #turn-indicator { | |
| font-size: 28px; font-weight: bold; letter-spacing: 4px; | |
| background: rgba(255,255,255,0.1); padding: 8px 30px; border-radius: 30px; | |
| display: none; transition: 0.3s; | |
| } | |
| #game-boards-container { display: flex; gap: 40px; flex-wrap: wrap; justify-content: center; } | |
| .game-area { display: flex; flex-direction: column; align-items: center; gap: 15px; position: relative; transition: opacity 0.3s; } | |
| .game-area.waiting { opacity: 0.5; pointer-events: none; } | |
| .player-label { font-size: 24px; font-weight: bold; color: #aaa; letter-spacing: 2px; } | |
| .board-wrapper { | |
| position: relative; padding: 8px; border-radius: 16px; | |
| background: linear-gradient(135deg, #1a1a2e, #16213e); | |
| box-shadow: 0 0 40px rgba(77, 150, 255, 0.1), inset 0 0 20px rgba(0, 0, 0, 0.3); | |
| border: 1px solid rgba(77, 150, 255, 0.15); | |
| } | |
| .board { display: grid; grid-template-columns: repeat(8, 1fr); grid-template-rows: repeat(8, 1fr); gap: 2px; width: 360px; height: 360px; } | |
| .cell { | |
| width: 100%; height: 100%; border-radius: 6px; position: relative; | |
| background: rgba(255, 255, 255, 0.03); border: 1px solid rgba(255, 255, 255, 0.04); | |
| } | |
| .cell.highlight { background: rgba(255, 255, 255, 0.08); } | |
| .block, .ghost { position: absolute; inset: 0; border-radius: 6px; overflow: hidden; } | |
| .block img, .ghost img { width: 100%; height: 100%; display: block; } | |
| .ghost { opacity: 0.35; pointer-events: none; } | |
| .clearing { animation: clearAnim 0.4s ease-out forwards; } | |
| @keyframes clearAnim { 50% { transform: scale(1.3); opacity: 0.8; } 100% { transform: scale(0); opacity: 0; } } | |
| .hand-area { | |
| display: flex; gap: 16px; padding: 12px; min-height: 110px; | |
| background: linear-gradient(135deg, #1a1a2e, #16213e); border-radius: 16px; | |
| } | |
| .hand-piece { | |
| display: grid; grid-template-columns: repeat(2, 40px); grid-template-rows: repeat(2, 40px); gap: 3px; | |
| padding: 6px; border-radius: 12px; cursor: grab; transition: transform 0.2s; position: relative; | |
| } | |
| .hand-piece.interactive:hover { transform: scale(1.08); background: rgba(255,255,255,0.05); } | |
| .hand-piece.disabled { opacity: 0.25; cursor: not-allowed; pointer-events: none; filter: grayscale(1); } | |
| .hand-cell-wrapper { position: relative; width: 40px; height: 40px; } | |
| .hand-cell { position: absolute; width: 100%; height: 100%; border-radius: 6px; overflow: hidden; transition: 0.1s ease-in-out; } | |
| .hand-cell img { width: 100%; height: 100%; display: block; } | |
| .dragging-piece { | |
| position: fixed; display: grid; grid-template-columns: repeat(2, 44px); grid-template-rows: repeat(2, 44px); gap: 3px; | |
| pointer-events: none; z-index: 1000; filter: drop-shadow(0 4px 12px rgba(0,0,0,0.5)); | |
| } | |
| .dragging-piece .drag-cell { border-radius: 6px; overflow: hidden; width: 100%; height: 100%; } | |
| .dragging-piece img { width: 100%; height: 100%; } | |
| .garbage-ui { | |
| position: absolute; top: -30px; left: 0; right: 0; | |
| height: 20px; background: rgba(255,0,0,0.2); border-radius: 10px; overflow: hidden; display: none; | |
| } | |
| .garbage-bar { height: 100%; background: #ff6b6b; width: 100%; transform-origin: left; transition: transform 0.1s linear; } | |
| .garbage-text { | |
| position: absolute; top: 0; left: 50%; transform: translateX(-50%); | |
| font-size: 14px; font-weight: bold; color: #fff; line-height: 20px; | |
| } | |
| .message-pop { | |
| position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); | |
| font-size: 32px; font-weight: 900; color: #ffd93d; text-shadow: 0 0 20px rgba(255, 217, 61, 0.8); | |
| opacity: 0; pointer-events: none; z-index: 100; text-align: center; white-space: nowrap; | |
| } | |
| #game-over-overlay { | |
| position: fixed; inset: 0; background: rgba(0,0,0,0.85); | |
| display: flex; flex-direction: column; justify-content: center; align-items: center; | |
| z-index: 200; opacity: 0; pointer-events: none; transition: 0.5s; | |
| } | |
| #game-over-overlay.show { opacity: 1; pointer-events: all; } |