Spaces:
Running
Running
| :root { | |
| --bg-primary: #0f1419; | |
| --bg-secondary: #1a2332; | |
| --bg-zone: #232d3f; | |
| --bg-zone-opponent: #2a2035; | |
| --accent-pink: #ff6b9d; | |
| --accent-blue: #4a9eff; | |
| --accent-cyan: #00bcd4; | |
| --accent-gold: #f5c542; | |
| --accent-green: #4ade80; | |
| --accent-purple: #a855f7; | |
| --text: #f0f0f0; | |
| --text-dim: #6b7a8f; | |
| --border: #3d4a5c; | |
| --card-width: 65px; | |
| --card-height: 91px; | |
| --card-width-mini: 60px; | |
| --card-height-mini: 84px; | |
| --card-width-landscape: 112px; | |
| --card-height-landscape: 80px; | |
| --transition-speed: 0.3s; | |
| } | |
| /* Action Pending / Loading State */ | |
| body.action-pending { | |
| cursor: wait; | |
| } | |
| body.action-pending .game-board, | |
| body.action-pending .sidebar-right, | |
| body.action-pending .hand-group { | |
| opacity: 0.7; | |
| pointer-events: none; | |
| transition: opacity 0.2s; | |
| } | |
| body.action-pending::after { | |
| content: "Processing..."; | |
| position: fixed; | |
| bottom: 20px; | |
| right: 20px; | |
| background: var(--accent-pink); | |
| color: white; | |
| padding: 8px 16px; | |
| border-radius: 20px; | |
| font-size: 0.8rem; | |
| font-weight: bold; | |
| z-index: 1000; | |
| box-shadow: 0 4px 12px rgba(0, 0, 0, 0.5); | |
| animation: pulse 1.5s infinite; | |
| } | |
| .cost { | |
| position: absolute; | |
| top: 2px; | |
| left: 2px; | |
| /* MOVED TO LEFT for visibility in overlapped hand */ | |
| background: var(--accent-pink); | |
| color: white; | |
| width: 24px; | |
| height: 24px; | |
| border-radius: 50%; | |
| display: flex; | |
| justify-content: center; | |
| align-items: center; | |
| font-weight: bold; | |
| font-size: 0.9rem; | |
| box-shadow: 0 2px 4px rgba(0, 0, 0, 0.5); | |
| z-index: 5; | |
| text-shadow: 1px 1px 0 #000; | |
| } | |
| @keyframes pulse { | |
| 0% { | |
| opacity: 0.6; | |
| } | |
| 50% { | |
| opacity: 1; | |
| } | |
| 100% { | |
| opacity: 0.6; | |
| } | |
| } | |
| * { | |
| box-sizing: border-box; | |
| margin: 0; | |
| padding: 0; | |
| } | |
| button { | |
| border: none; | |
| background: none; | |
| color: inherit; | |
| font-family: inherit; | |
| cursor: pointer; | |
| outline: none; | |
| } | |
| body { | |
| font-family: 'Noto Sans JP', 'Segoe UI', 'Hiragino Kaku Gothic ProN', sans-serif; | |
| background: linear-gradient(135deg, var(--bg-primary) 0%, #1a1a2e 100%); | |
| color: var(--text); | |
| min-height: 100vh; | |
| overflow-x: hidden; | |
| } | |
| /* Header */ | |
| .header { | |
| display: flex; | |
| flex-direction: column; | |
| /* Stack rows vertically */ | |
| padding: 4px 12px; | |
| /* Reduced from 6px */ | |
| background: linear-gradient(90deg, var(--bg-secondary), #1e2a3d); | |
| border-bottom: 2px solid var(--accent-pink); | |
| position: sticky; | |
| top: 0; | |
| z-index: 100; | |
| } | |
| /* New: Main Row for Title, Info, Controls */ | |
| .header-main-row { | |
| display: flex; | |
| justify-content: space-between; | |
| align-items: center; | |
| width: 100%; | |
| } | |
| .header h1 { | |
| font-size: 1.2rem; | |
| font-weight: bold; | |
| color: var(--accent-pink); | |
| text-shadow: 0 2px 4px rgba(0, 0, 0, 0.5); | |
| margin: 0; | |
| display: flex; | |
| align-items: center; | |
| } | |
| /* Stats */ | |
| .info-bar { | |
| display: flex; | |
| gap: 15px; | |
| align-items: center; | |
| background: rgba(0, 0, 0, 0.3); | |
| padding: 4px 12px; | |
| border-radius: 20px; | |
| border: 1px solid rgba(255, 255, 255, 0.05); | |
| } | |
| .stat { | |
| font-size: 0.9rem; | |
| color: #ccc; | |
| display: flex; | |
| align-items: center; | |
| gap: 6px; | |
| } | |
| .stat-icon { | |
| font-size: 1.1rem; | |
| /* Reduced from 1.2rem */ | |
| } | |
| .stat-label { | |
| opacity: 0.8; | |
| } | |
| .info-bar .stat strong { | |
| color: var(--accent-blue); | |
| font-weight: 700; | |
| } | |
| .controls { | |
| display: flex; | |
| gap: 8px; | |
| align-items: center; | |
| } | |
| .btn { | |
| padding: 3px 10px; | |
| /* Compressed padding */ | |
| border: none; | |
| border-radius: 12px; | |
| /* Slightly squarer */ | |
| background: linear-gradient(135deg, var(--bg-zone), #2a3a4d); | |
| color: var(--text); | |
| font-size: 0.75rem; | |
| /* Smaller font */ | |
| cursor: pointer; | |
| transition: all 0.3s; | |
| border: 1px solid var(--border); | |
| display: inline-flex; | |
| align-items: center; | |
| gap: 6px; | |
| white-space: nowrap; | |
| flex-shrink: 0; | |
| } | |
| .btn:hover { | |
| background: linear-gradient(135deg, var(--accent-blue), #3a7bd5); | |
| transform: translateY(-1px); | |
| box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3); | |
| } | |
| .btn-primary { | |
| background: linear-gradient(135deg, var(--accent-pink), #e05080); | |
| font-weight: bold; | |
| } | |
| .btn-settings { | |
| border: 1px solid var(--accent-purple); | |
| color: white; | |
| } | |
| /* Total Hearts Display */ | |
| .total-hearts-display { | |
| display: flex; | |
| gap: 4px; | |
| align-items: center; | |
| background: rgba(0, 0, 0, 0.3); | |
| padding: 2px 8px; | |
| border-radius: 12px; | |
| border: 1px solid var(--border); | |
| margin-right: 15px; | |
| } | |
| .total-hearts-label { | |
| font-size: 0.7rem; | |
| color: var(--text-dim); | |
| margin-right: 4px; | |
| } | |
| .hearts-stat { | |
| gap: 0 ; | |
| padding: 2px 4px ; | |
| margin-right: 0 ; | |
| display: flex; | |
| align-items: center; | |
| } | |
| .header-heart-icon { | |
| width: clamp(14px, 2vw, 20px); | |
| height: clamp(14px, 2vw, 20px); | |
| object-fit: contain; | |
| } | |
| .th-pip { | |
| font-size: 0.75rem; | |
| /* Emoji or text size */ | |
| margin: 0 1px; | |
| } | |
| .btn-danger { | |
| background: linear-gradient(135deg, #ff4444, #cc0000); | |
| border-color: #ff8888; | |
| } | |
| /* Modal Styles */ | |
| .modal-overlay { | |
| position: fixed; | |
| top: 0; | |
| left: 0; | |
| width: 100%; | |
| height: 100%; | |
| background: rgba(0, 0, 0, 0.4); | |
| display: none; | |
| justify-content: center; | |
| align-items: center; | |
| z-index: 2000; | |
| backdrop-filter: blur(8px); | |
| } | |
| .modal-content { | |
| background: var(--bg-secondary); | |
| border: 2px solid var(--accent-pink); | |
| border-radius: 12px; | |
| padding: 20px; | |
| width: 500px; | |
| max-width: 90%; | |
| max-height: 85vh; | |
| display: flex; | |
| flex-direction: column; | |
| box-shadow: 0 10px 30px rgba(0, 0, 0, 0.5); | |
| } | |
| .modal-header { | |
| display: flex; | |
| justify-content: space-between; | |
| align-items: center; | |
| margin-bottom: 15px; | |
| border-bottom: 1px solid var(--border); | |
| padding-bottom: 10px; | |
| } | |
| .modal-title { | |
| font-size: 1.2rem; | |
| color: var(--accent-pink); | |
| font-weight: bold; | |
| } | |
| .modal-body { | |
| margin-bottom: 20px; | |
| overflow-y: auto; | |
| flex: 1; | |
| padding-right: 5px; | |
| /* Prevent scrollbar overlap */ | |
| } | |
| /* Settings Modal Grid */ | |
| .settings-grid { | |
| display: grid; | |
| grid-template-columns: 1fr; | |
| gap: 20px; | |
| } | |
| .settings-group { | |
| display: flex; | |
| flex-direction: column; | |
| gap: 10px; | |
| background: rgba(255, 255, 255, 0.03); | |
| padding: 15px; | |
| border-radius: 10px; | |
| border: 1px solid rgba(255, 255, 255, 0.05); | |
| } | |
| .settings-group label { | |
| font-size: 0.75rem; | |
| text-transform: uppercase; | |
| letter-spacing: 1px; | |
| color: var(--accent-pink); | |
| font-weight: bold; | |
| margin-bottom: 5px; | |
| } | |
| .settings-group .btn { | |
| width: 100%; | |
| justify-content: center; | |
| padding: 10px; | |
| } | |
| .close-btn { | |
| font-size: 1.5rem; | |
| opacity: 0.6; | |
| transition: opacity 0.3s; | |
| } | |
| .close-btn:hover { | |
| opacity: 1; | |
| } | |
| .report-textarea { | |
| width: 100%; | |
| height: 150px; | |
| background: var(--bg-zone); | |
| border: 1px solid var(--border); | |
| border-radius: 8px; | |
| color: var(--text); | |
| padding: 10px; | |
| font-family: inherit; | |
| resize: vertical; | |
| margin-top: 10px; | |
| } | |
| .modal-footer { | |
| display: flex; | |
| justify-content: flex-end; | |
| gap: 10px; | |
| } | |
| /* Game Board Container */ | |
| .game-container { | |
| display: flex; | |
| flex-direction: row; | |
| width: 100vw; | |
| height: calc(100vh - 52px); | |
| overflow: hidden; | |
| } | |
| /* Three Pane Layout */ | |
| .sidebar-left { | |
| width: 250px; | |
| /* Default width */ | |
| min-width: 150px; | |
| max-width: 50%; | |
| background: var(--bg-secondary); | |
| border-right: 1px solid var(--border); | |
| display: flex; | |
| flex-direction: column; | |
| padding: 10px; | |
| overflow: hidden; | |
| /* Lock entire pane scroll */ | |
| } | |
| .game-board { | |
| flex-grow: 1; | |
| display: flex; | |
| flex-direction: column; | |
| gap: 8px; | |
| overflow-y: auto; | |
| padding: 10px; | |
| min-width: 300px; | |
| } | |
| .sidebar-right { | |
| width: 280px; | |
| /* Default width */ | |
| min-width: 200px; | |
| max-width: 50%; | |
| background: var(--bg-secondary); | |
| border-left: 1px solid var(--border); | |
| display: flex; | |
| flex-direction: column; | |
| gap: 12px; | |
| padding: 12px; | |
| overflow-y: auto; | |
| } | |
| /* 2-Column +/* 3-Column -> 2-Column + Bottom Row Layout */ | |
| .board-inner { | |
| display: flex; | |
| flex-direction: column; | |
| gap: 4px; | |
| width: 100%; | |
| /* Allow cards to pop up out of the board-inner boundary if needed */ | |
| overflow: visible; | |
| } | |
| /* Ensure sections don't clip */ | |
| .player-section, | |
| .opponent-section { | |
| overflow: visible ; | |
| position: relative; | |
| z-index: 1; | |
| } | |
| /* Field Row: 3 Columns [Success/Energy | Stage/Live | Decks] */ | |
| .field-row { | |
| display: grid; | |
| grid-template-columns: minmax(80px, auto) 1fr minmax(120px, auto); | |
| gap: 10px; | |
| align-items: center; | |
| width: 100%; | |
| } | |
| .center-field { | |
| display: flex; | |
| flex-direction: column; | |
| gap: 0; | |
| min-width: 0; | |
| } | |
| .energy-row { | |
| height: 48px; | |
| width: 100%; | |
| margin-bottom: 2px; | |
| } | |
| .energy-area-container.horizontal { | |
| height: 100%; | |
| padding: 2px; | |
| background: rgba(0, 0, 0, 0.15); | |
| border-radius: 4px; | |
| } | |
| .side-column { | |
| display: flex; | |
| flex-direction: column; | |
| gap: 4px; | |
| justify-content: center; | |
| } | |
| .hand-row { | |
| width: 100%; | |
| } | |
| .deck-discard-group { | |
| display: flex; | |
| flex-wrap: wrap; | |
| /* Allow wrapping if needed */ | |
| justify-content: center; | |
| gap: 4px; | |
| width: 100%; | |
| } | |
| /* Groupings */ | |
| .live-group, | |
| .stage-group, | |
| .hand-group, | |
| .energy-area-container { | |
| background: rgba(0, 0, 0, 0.2); | |
| border-radius: 6px; | |
| padding: 2px; | |
| /* Reduced from 6px */ | |
| border: 1px solid var(--border); | |
| } | |
| .live-group, | |
| .stage-group, | |
| .hand-group, | |
| .energy-area-container { | |
| padding: 2px; | |
| border-radius: 4px; | |
| background: rgba(0, 0, 0, 0.1); | |
| } | |
| /* Hide Headings to save space */ | |
| .live-group h2, | |
| .stage-group h2, | |
| .successful-live-area-container h2, | |
| .deck-area h2, | |
| .waiting-room-area h2, | |
| .area-header h2 { | |
| display: none; | |
| } | |
| .area-count { | |
| font-size: 0.65rem; | |
| color: var(--accent-pink); | |
| opacity: 0.8; | |
| background: rgba(0, 0, 0, 0.3); | |
| padding: 1px 4px; | |
| border-radius: 3px; | |
| position: absolute; | |
| top: 2px; | |
| right: 2px; | |
| pointer-events: none; | |
| z-index: 10; | |
| } | |
| .live-group, | |
| .stage-group, | |
| .hand-group, | |
| .energy-area-container, | |
| .waiting-room-area { | |
| position: relative; | |
| /* for absolute area-count */ | |
| } | |
| .card-area { | |
| min-height: 40px; | |
| border: 1px dashed var(--border); | |
| border-radius: 4px; | |
| padding: 2px; | |
| display: flex; | |
| flex-wrap: wrap; | |
| gap: 4px; | |
| justify-content: center; | |
| overflow: hidden; | |
| position: relative; | |
| background: rgba(0, 0, 0, 0.1); | |
| } | |
| .card-area.compact { | |
| min-height: 30px; | |
| padding: 1px; | |
| } | |
| .card-area.energy { | |
| /* Horizontal strip style */ | |
| display: flex; | |
| flex-direction: row; | |
| /* Horizontal */ | |
| overflow-x: auto; | |
| overflow-y: hidden; | |
| flex-wrap: nowrap; | |
| justify-content: center; | |
| align-items: center; | |
| height: 100%; | |
| gap: 2px; | |
| min-height: 0; | |
| /* Override default */ | |
| padding: 2px; | |
| border: none; | |
| background: transparent; | |
| } | |
| .card-area.energy .card { | |
| width: 30px; | |
| /* Small overlapping cards */ | |
| height: 42px; | |
| flex-shrink: 0; | |
| } | |
| .card-area.discard { | |
| height: 80px; | |
| /* Fixed height */ | |
| min-height: 80px; | |
| overflow-y: auto; | |
| /* Scrollable */ | |
| align-content: flex-start; | |
| /* Pack to top */ | |
| } | |
| .card-area.exclude { | |
| min-height: 40px; | |
| background: rgba(50, 0, 0, 0.2); | |
| /* Red tint for banish */ | |
| border-color: rgba(255, 0, 0, 0.3); | |
| } | |
| .card-area.hand { | |
| height: 240px; | |
| min-height: 240px; | |
| max-height: 240px; | |
| overflow-x: auto; | |
| overflow-y: hidden; | |
| /* Prevent vertical scrollbar */ | |
| flex-wrap: nowrap; | |
| justify-content: flex-start; | |
| /* Fix scroll clipping on left */ | |
| padding: 20px 40px; | |
| /* More horizontal padding to prevent edge clipping */ | |
| background: rgba(255, 255, 255, 0.05); | |
| align-items: center; | |
| gap: -40px; | |
| /* Slightly less aggressive compression */ | |
| } | |
| /* New Card Indicator */ | |
| .card.new-card { | |
| /* Ensure the card itself has layering to support the badge */ | |
| position: relative; | |
| } | |
| .card.new-card::after { | |
| content: "NEW!"; | |
| position: absolute; | |
| top: -15px; | |
| /* Lift higher */ | |
| left: 50%; | |
| transform: translateX(-50%); | |
| background: #ffeb3b; | |
| color: #d32f2f; | |
| font-size: 0.7rem; | |
| font-weight: bold; | |
| padding: 2px 6px; | |
| border-radius: 4px; | |
| z-index: 2000; | |
| /* Ensure above everything */ | |
| box-shadow: 0 2px 4px rgba(0, 0, 0, 0.3); | |
| white-space: nowrap; | |
| pointer-events: none; | |
| border: 1px solid #d32f2f; | |
| } | |
| /* Fix ancestors to prevent clipping of scaled cards */ | |
| .hand-row, | |
| .hand-group, | |
| .player-section, | |
| .board-container { | |
| overflow: visible ; | |
| } | |
| /* Ensure overlap works with flex gap support or fallback */ | |
| /* Ensure Right side is on top */ | |
| .card-area.hand .card { | |
| margin-right: -50px; | |
| position: relative; | |
| } | |
| /* Explicit positive z-index based on index could be done in JS, | |
| but for now we rely on DOM order for Right-over-Left. | |
| If it's reversed, we'd need flex-direction: row-reverse. | |
| */ | |
| .card-area.hand .card:last-child { | |
| margin-right: 0; | |
| } | |
| .card-area.hand .card, | |
| .card-area.hand .card img { | |
| height: 100%; | |
| width: auto; | |
| max-height: 100%; | |
| transition: transform 0.2s ease, z-index 0s, box-shadow 0.2s; | |
| } | |
| .card-area.hand .card:hover, | |
| .card-area.hand .card.highlight-source, | |
| .card-area.hand .card.highlight-target { | |
| transform: scale(1.2); | |
| /* REMOVED translateY to stay in place vertically */ | |
| z-index: 1000 ; | |
| /* Bring to very front */ | |
| box-shadow: 0 15px 35px rgba(0, 0, 0, 0.6); | |
| position: relative; | |
| transition: none ; | |
| /* SNAP for instant feedback & correct tooltip pos */ | |
| } | |
| /* General pop-up for all other cards/slots */ | |
| .card:hover, | |
| .member-slot:hover, | |
| .card.highlight-source, | |
| .card.highlight-target, | |
| .member-slot.highlight-source, | |
| .member-slot.highlight-target { | |
| transform: scale(1.1); | |
| z-index: 90; | |
| box-shadow: 0 5px 15px rgba(0, 0, 0, 0.4); | |
| position: relative; | |
| transition: transform 0.2s ease, box-shadow 0.2s; | |
| } | |
| .card-area.stage { | |
| min-height: 110px; | |
| display: grid; | |
| grid-template-columns: var(--card-width) var(--card-width) var(--card-width); | |
| justify-content: center; | |
| gap: 15px; | |
| /* Match live-zone-cards gap */ | |
| overflow: visible; | |
| } | |
| .live-zone-cards { | |
| min-height: 140px; | |
| display: grid; | |
| grid-template-columns: var(--card-width) var(--card-width) var(--card-width); | |
| justify-content: center; | |
| align-items: center; | |
| gap: 15px; | |
| overflow: visible; | |
| } | |
| /* Unified container for slots to allow on-card buttons */ | |
| .board-slot-container { | |
| position: relative; | |
| display: flex; | |
| flex-direction: column; | |
| align-items: center; | |
| gap: 4px; | |
| width: var(--card-width); | |
| } | |
| .slot-action-btn { | |
| width: 100%; | |
| padding: 2px 4px; | |
| font-size: 0.7rem; | |
| font-weight: bold; | |
| text-transform: uppercase; | |
| border-radius: 4px; | |
| background: linear-gradient(135deg, var(--accent-gold), #d97706); | |
| color: #111; | |
| border: 1px solid rgba(0, 0, 0, 0.2); | |
| box-shadow: 0 2px 4px rgba(0, 0, 0, 0.3); | |
| cursor: pointer; | |
| transition: all 0.2s; | |
| white-space: nowrap; | |
| overflow: hidden; | |
| text-overflow: ellipsis; | |
| z-index: 10; | |
| } | |
| .slot-action-btn:hover { | |
| transform: translateY(-1px); | |
| box-shadow: 0 4px 8px rgba(0, 0, 0, 0.4); | |
| filter: brightness(1.1); | |
| } | |
| .slot-action-btn.btn-perform { | |
| background: linear-gradient(135deg, #a855f7, #6b21a8); | |
| color: white; | |
| } | |
| /* REVERTED TO PORTRAIT */ | |
| .card.type-live { | |
| /* Standard portrait sizing */ | |
| width: var(--card-width); | |
| height: var(--card-height); | |
| transform: none; | |
| border: 2px solid var(--accent-pink); | |
| } | |
| .card.type-live img { | |
| width: 100%; | |
| height: 100%; | |
| object-fit: cover; | |
| /* Cover for portrait */ | |
| border-radius: 6px; | |
| } | |
| /* If the cards are portrait in data, we rotate them */ | |
| /* The previous code might have used fixed portrait ratios, let's force landscape feel */ | |
| /* Specific hand styling to prevent overlap */ | |
| .hand-cards, | |
| .hand { | |
| max-height: 150px; | |
| overflow-y: auto; | |
| background: rgba(0, 0, 0, 0.1); | |
| } | |
| .card-slots { | |
| display: flex; | |
| gap: 10px; | |
| justify-content: center; | |
| } | |
| .live-slot, | |
| .stage-slot { | |
| width: var(--card-width); | |
| height: var(--card-height); | |
| background: rgba(0, 0, 0, 0.3); | |
| border: 1px dashed var(--border); | |
| border-radius: 3px; | |
| } | |
| /* Horizontal card support for live zones */ | |
| .card.type-live { | |
| width: var(--card-width-landscape); | |
| height: var(--card-height-landscape); | |
| } | |
| .card.type-live img { | |
| width: 100%; | |
| height: 100%; | |
| object-fit: cover; | |
| } | |
| /* Resizer Handle */ | |
| .resizer { | |
| width: 5px; | |
| background: var(--bg-primary); | |
| cursor: col-resize; | |
| z-index: 10; | |
| transition: background 0.2s; | |
| flex-shrink: 0; | |
| } | |
| .resizer:hover, | |
| .resizer.resizing { | |
| background: var(--accent-blue); | |
| } | |
| /* Player Sections */ | |
| .player-section { | |
| background: var(--bg-secondary); | |
| border-radius: 8px; | |
| padding: 6px; | |
| border: 1px solid var(--border); | |
| box-shadow: 0 2px 10px rgba(0, 0, 0, 0.3); | |
| margin-bottom: 8px; | |
| } | |
| .player-section.opponent { | |
| background: linear-gradient(180deg, var(--bg-zone-opponent), var(--bg-secondary)); | |
| border-color: #4a3050; | |
| padding: 6px; | |
| } | |
| /* Compact cards for opponent section */ | |
| .player-section.opponent .card { | |
| width: 60px; | |
| height: 84px; | |
| font-size: 0.5rem; | |
| } | |
| .player-section.opponent .card .name { | |
| font-size: 0.45rem; | |
| } | |
| .player-section.opponent .member-slot { | |
| width: 70px; | |
| height: 95px; | |
| } | |
| .player-label { | |
| font-size: 0.7rem; | |
| color: var(--text-dim); | |
| margin-bottom: 8px; | |
| display: flex; | |
| justify-content: space-between; | |
| align-items: center; | |
| } | |
| .player-label .score-badge { | |
| background: var(--accent-gold); | |
| color: #000; | |
| padding: 2px 10px; | |
| border-radius: 10px; | |
| font-weight: bold; | |
| } | |
| /* Zones Grid */ | |
| .zones-row { | |
| display: flex; | |
| gap: 10px; | |
| align-items: flex-start; | |
| justify-content: center; | |
| flex-wrap: wrap; | |
| } | |
| .zone { | |
| background: var(--bg-zone); | |
| border-radius: 8px; | |
| padding: 8px; | |
| border: 1px solid var(--border); | |
| min-width: 80px; | |
| } | |
| .zone-title { | |
| font-size: 0.65rem; | |
| color: var(--text-dim); | |
| text-align: center; | |
| margin-bottom: 6px; | |
| padding-bottom: 4px; | |
| border-bottom: 1px solid var(--border); | |
| } | |
| /* Stage - 3 Member Areas */ | |
| .stage-zone { | |
| flex: 1; | |
| max-width: 400px; | |
| } | |
| .stage-slots { | |
| display: flex; | |
| gap: 15px; | |
| justify-content: center; | |
| } | |
| .member-slot { | |
| width: var(--card-width); | |
| height: var(--card-height); | |
| background: rgba(0, 0, 0, 0.4); | |
| border: 2px dashed var(--border); | |
| border-radius: 6px; | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| position: relative; | |
| transition: all 0.3s; | |
| } | |
| .member-slot.drag-over { | |
| background: rgba(74, 158, 255, 0.2); | |
| border-color: var(--accent-blue); | |
| border-style: solid; | |
| transform: scale(1.05); | |
| } | |
| .member-slot.filled { | |
| border-style: solid; | |
| border-color: var(--accent-blue); | |
| box-shadow: 0 0 10px rgba(74, 158, 255, 0.3); | |
| } | |
| .member-slot.tapped { | |
| transform: rotate(90deg); | |
| opacity: 0.6; | |
| } | |
| .area-label { | |
| font-size: 0.6rem; | |
| color: var(--text-dim); | |
| } | |
| .attached-energy { | |
| display: flex; | |
| gap: 3px; | |
| flex-wrap: wrap; | |
| justify-content: center; | |
| max-width: 80px; | |
| } | |
| /* Hand Zone Styling - Overflow Handling */ | |
| .hand-zone { | |
| width: 100%; | |
| overflow-x: auto; | |
| overflow-y: visible; | |
| /* Try to allow pop-ups */ | |
| white-space: nowrap; | |
| /* Custom Scrollbar for Hand */ | |
| scrollbar-width: thin; | |
| scrollbar-color: var(--accent-blue) var(--bg-zone); | |
| padding-top: 15px; | |
| /* Space for pop-up */ | |
| min-height: 120px; | |
| /* Ensure space */ | |
| } | |
| .hand-cards { | |
| display: flex; | |
| gap: 0; | |
| /* Remove gap, we use margins */ | |
| padding: 5px 20px; | |
| /* Side padding for first/last card */ | |
| min-width: 100%; | |
| width: max-content; | |
| align-items: center; | |
| } | |
| /* Overlapping Cards Style */ | |
| .hand-cards .card { | |
| /* margin-right is dynamically managed by JS adjustHandLayout() */ | |
| margin-right: -5px; | |
| transition: all 0.2s cubic-bezier(0.25, 0.8, 0.25, 1); | |
| box-shadow: -2px 0 5px rgba(0, 0, 0, 0.3); | |
| /* Shadow on left side */ | |
| position: relative; | |
| /* z-index set dynamically via nth-child if needed, but flex order usually handles paint order */ | |
| } | |
| .hand-cards .card:last-child { | |
| margin-right: 0 ; | |
| } | |
| /* Hover/Focus Effect (Pop Up) */ | |
| .hand-cards .card:hover, | |
| .hand-cards .card:focus-within { | |
| transform: translateY(-15px) scale(1.1); | |
| z-index: 100; | |
| margin-right: 15px; | |
| /* Push neighbor slightly to reveal more */ | |
| margin-left: 10px; | |
| /* Push self away from left neighbor */ | |
| box-shadow: 0 5px 15px rgba(0, 0, 0, 0.6); | |
| } | |
| /* Mobile Tweak: More aggressive overlap handled by JS now */ | |
| @media (max-width: 768px) { | |
| /* .hand-cards .card { margin-right: ... } handled by JS */ | |
| } | |
| /* Live Zone Styling - Aligned with Stage */ | |
| /* .live-zone-cards already defined above with grid and 15px gap */ | |
| .energy-mini { | |
| width: 12px; | |
| height: 12px; | |
| border-radius: 50%; | |
| background: linear-gradient(135deg, var(--accent-gold), #d4a800); | |
| border: 1px solid rgba(255, 255, 255, 0.4); | |
| box-shadow: 0 0 5px var(--accent-gold); | |
| } | |
| /* Card Styling */ | |
| .card { | |
| width: var(--card-width); | |
| height: var(--card-height); | |
| background-clip: padding-box; | |
| background: linear-gradient(135deg, var(--bg-card), var(--bg-dark)); | |
| border: 1px solid var(--border); | |
| padding: 4px; | |
| color: var(--text); | |
| border-radius: 5px; | |
| overflow: hidden; | |
| position: relative; | |
| cursor: pointer; | |
| transition: all var(--transition-speed) cubic-bezier(0.4, 0, 0.2, 1); | |
| flex-shrink: 0; | |
| } | |
| .card.landscape { | |
| width: var(--card-height); | |
| height: var(--card-width); | |
| } | |
| .card.type-live { | |
| width: var(--card-height); | |
| height: var(--card-width); | |
| } | |
| .card:hover { | |
| transform: translateY(-4px); | |
| box-shadow: 0 8px 20px rgba(0, 0, 0, 0.4); | |
| } | |
| .card img { | |
| width: 100%; | |
| height: 100%; | |
| object-fit: cover; | |
| } | |
| .card .name { | |
| position: absolute; | |
| bottom: 0; | |
| left: 0; | |
| right: 0; | |
| background: rgba(0, 0, 0, 0.85); | |
| padding: 3px; | |
| font-size: 0.5rem; | |
| text-align: center; | |
| white-space: nowrap; | |
| overflow: hidden; | |
| text-overflow: ellipsis; | |
| } | |
| .card .cost { | |
| position: absolute; | |
| top: 2px; | |
| right: 2px; | |
| background: var(--accent-pink); | |
| border-radius: 50%; | |
| width: 16px; | |
| height: 16px; | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| font-size: 0.55rem; | |
| font-weight: bold; | |
| } | |
| .card.type-live .cost { | |
| background: var(--accent-purple); | |
| } | |
| .card.hidden { | |
| background: linear-gradient(145deg, #404050, #2a2a35); | |
| } | |
| .card.hidden::after { | |
| content: '🂠'; | |
| position: absolute; | |
| top: 50%; | |
| left: 50%; | |
| transform: translate(-50%, -50%); | |
| font-size: 1.5rem; | |
| } | |
| .card.selected { | |
| border: 2px solid var(--accent-gold); | |
| transform: translateY(-8px); | |
| box-shadow: 0 0 15px var(--accent-gold); | |
| } | |
| .card.card-playable { | |
| border: 2px solid var(--accent-green); | |
| box-shadow: 0 0 10px rgba(74, 222, 128, 0.4); | |
| } | |
| .card.card-baton-playable { | |
| border: 2px solid var(--accent-cyan); | |
| box-shadow: 0 0 10px rgba(0, 188, 212, 0.4); | |
| } | |
| .card.card-locked { | |
| filter: grayscale(0.8); | |
| opacity: 0.7; | |
| cursor: not-allowed; | |
| } | |
| .card.selected::before { | |
| content: 'Selected'; | |
| position: absolute; | |
| top: 50%; | |
| left: 50%; | |
| transform: translate(-50%, -50%) rotate(-30deg); | |
| background: rgba(255, 0, 0, 0.8); | |
| color: white; | |
| padding: 2px 10px; | |
| font-size: 0.7rem; | |
| font-weight: bold; | |
| border-radius: 4px; | |
| z-index: 10; | |
| } | |
| /* Stats Overlay */ | |
| .card .stats { | |
| position: absolute; | |
| bottom: 18px; | |
| left: 0; | |
| width: 100%; | |
| display: flex; | |
| justify-content: space-between; | |
| padding: 0 4px; | |
| pointer-events: none; | |
| } | |
| .card.mulligan-selected { | |
| filter: grayscale(0.8); | |
| opacity: 0.7; | |
| /* cursor: not-allowed; We want it clickable to toggle back */ | |
| } | |
| .card.new-card::after { | |
| content: 'NEW'; | |
| position: absolute; | |
| top: -5px; | |
| left: 50%; | |
| transform: translateX(-50%); | |
| background: var(--accent-blue); | |
| color: #fff; | |
| padding: 1px 4px; | |
| font-size: 0.5rem; | |
| border-radius: 4px; | |
| box-shadow: 0 2px 5px rgba(0, 0, 0, 0.5); | |
| z-index: 20; | |
| pointer-events: none; | |
| } | |
| .card.new-card { | |
| border-color: var(--accent-blue); | |
| box-shadow: 0 0 8px rgba(74, 158, 255, 0.4); | |
| } | |
| /* Colored Heart Pips */ | |
| .heart-pips { | |
| display: flex; | |
| gap: 2px; | |
| flex-wrap: wrap; | |
| justify-content: center; | |
| max-width: 95%; | |
| margin: 0 auto 2px; | |
| } | |
| .heart-pip { | |
| width: 10px; | |
| height: 10px; | |
| border-radius: 50%; | |
| border: 1px solid rgba(255, 255, 255, 0.5); | |
| font-size: 6px; | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| } | |
| .heart-pip.color-0 { | |
| background: #ff88cc; | |
| } | |
| /* PINK */ | |
| .heart-pip.color-1 { | |
| background: #ff4444; | |
| } | |
| /* RED */ | |
| .heart-pip.color-2 { | |
| background: #ffcc00; | |
| } | |
| /* YELLOW */ | |
| .heart-pip.color-3 { | |
| background: #44cc44; | |
| } | |
| /* GREEN */ | |
| .heart-pip.color-4 { | |
| background: #4488ff; | |
| } | |
| /* BLUE */ | |
| .heart-pip.color-5 { | |
| background: #aa44ff; | |
| } | |
| /* ANY */ | |
| .heart-pip.color-any { | |
| background: rgba(255, 255, 255, 0.05); | |
| border: 1.5px solid #fff; | |
| box-shadow: inset 0 0 4px rgba(255, 255, 255, 0.4); | |
| } | |
| .heart-pip.color-any::after { | |
| content: '★'; | |
| font-size: 8px; | |
| color: rgba(255, 255, 255, 0.6); | |
| line-height: 1; | |
| } | |
| /* Blade Hearts (Yell) */ | |
| .blade-hearts { | |
| position: absolute; | |
| top: 20px; | |
| left: 2px; | |
| display: flex; | |
| flex-direction: column; | |
| gap: 1px; | |
| } | |
| /* Heart Pip Styles - Filled/Empty */ | |
| .heart-pip.empty { | |
| background: transparent ; | |
| box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.4); | |
| } | |
| .heart-pip.filled.color-0 { | |
| background: #ff88cc ; | |
| border-color: #ff88cc; | |
| box-shadow: 0 0 3px #ff88cc; | |
| } | |
| .heart-pip.filled.color-1 { | |
| background: #ff4444 ; | |
| border-color: #ff4444; | |
| box-shadow: 0 0 3px #ff4444; | |
| } | |
| .heart-pip.filled.color-2 { | |
| background: #ffcc00 ; | |
| border-color: #ffcc00; | |
| box-shadow: 0 0 3px #ffcc00; | |
| } | |
| .heart-pip.filled.color-3 { | |
| background: #44cc44 ; | |
| border-color: #44cc44; | |
| box-shadow: 0 0 3px #44cc44; | |
| } | |
| .heart-pip.filled.color-4 { | |
| background: #4488ff ; | |
| border-color: #4488ff; | |
| box-shadow: 0 0 3px #4488ff; | |
| } | |
| .heart-pip.filled.color-5 { | |
| background: #aa44ff ; | |
| border-color: #aa44ff; | |
| box-shadow: 0 0 3px #aa44ff; | |
| } | |
| .heart-pip.filled.color-any { | |
| background: linear-gradient(45deg, #ff0000, #ff7f00, #ffff00, #00ff00, #0000ff, #4b0082, #9400d3) ; | |
| border-color: #fff; | |
| box-shadow: 0 0 8px #fff, 0 0 15px rgba(255, 255, 255, 0.8), inset 0 0 5px rgba(255, 255, 255, 0.5); | |
| animation: rainbow-glow 3s linear infinite; | |
| } | |
| @keyframes rainbow-glow { | |
| 0% { | |
| filter: hue-rotate(0deg); | |
| } | |
| 100% { | |
| filter: hue-rotate(360deg); | |
| } | |
| } | |
| .blade-pip { | |
| width: 8px; | |
| height: 8px; | |
| border-radius: 2px; | |
| border: 1px solid #fff; | |
| opacity: 0.9; | |
| } | |
| .blade-pip.color-0 { | |
| background: #ff88cc; | |
| } | |
| .blade-pip.color-1 { | |
| background: #ff4444; | |
| } | |
| .blade-pip.color-2 { | |
| background: #ffcc00; | |
| } | |
| .blade-pip.color-3 { | |
| background: #44cc44; | |
| } | |
| .blade-pip.color-4 { | |
| background: #4488ff; | |
| } | |
| .blade-pip.color-5 { | |
| background: #aa44ff; | |
| } | |
| /* Card ID Styling - Hidden by default, shown on hover */ | |
| .card-id { | |
| position: absolute; | |
| top: 2px; | |
| left: 2px; | |
| background: rgba(0, 0, 0, 0.8); | |
| color: var(--accent-gold); | |
| font-size: 0.6rem; | |
| font-weight: bold; | |
| padding: 1px 3px; | |
| border-radius: 2px; | |
| z-index: 30; | |
| cursor: copy; | |
| pointer-events: auto; | |
| border: 1px solid var(--accent-gold); | |
| opacity: 0; | |
| transition: opacity 0.2s ease; | |
| } | |
| .game-card:hover .card-id, | |
| .member-slot:hover .card-id { | |
| opacity: 1; | |
| } | |
| .card-id:hover { | |
| background: var(--accent-gold); | |
| color: #000; | |
| } | |
| /* Stats Overlay */ | |
| /* Position heart-pips on member slots */ | |
| .member-slot .heart-pips { | |
| position: absolute; | |
| bottom: 32px; | |
| left: 0; | |
| width: 100%; | |
| justify-content: center; | |
| z-index: 10; | |
| pointer-events: none; | |
| margin: 0; | |
| } | |
| /* Tooltip for Ability */ | |
| /* Tooltip for Ability (Disabled CSS tooltip to use JS) */ | |
| /* .card:hover::after { content: attr(data-text); ... } */ | |
| .card-desc-panel { | |
| background: rgba(0, 0, 0, 0.4); | |
| border: 1px solid var(--border); | |
| border-radius: 8px; | |
| padding: 12px; | |
| margin-bottom: 10px; | |
| border-left: 4px solid var(--accent-pink); | |
| box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3); | |
| flex-shrink: 0; | |
| max-height: 60%; | |
| /* Increased from 40% to allow more text */ | |
| display: flex; | |
| flex-direction: column; | |
| overflow: hidden; | |
| /* Prevent bleed out */ | |
| } | |
| .card-desc-panel h3 { | |
| font-size: 0.8rem; | |
| text-transform: uppercase; | |
| letter-spacing: 1px; | |
| display: flex; | |
| align-items: center; | |
| gap: 6px; | |
| margin-bottom: 8px; | |
| } | |
| .card-desc-content { | |
| flex: 1; | |
| overflow-y: auto; | |
| scrollbar-width: thin; | |
| scrollbar-color: var(--accent-pink) transparent; | |
| font-size: 0.85rem; | |
| line-height: 1.4; | |
| color: #eee; | |
| overflow-wrap: break-word; | |
| word-break: break-word; | |
| white-space: pre-wrap; | |
| /* Preserve newlines from translator */ | |
| } | |
| .card-desc-content img { | |
| height: 1.1em; | |
| width: auto; | |
| max-width: 100%; | |
| min-width: 1.1em; | |
| vertical-align: middle; | |
| margin: 0 2px; | |
| display: inline-block; | |
| } | |
| .card-desc-content br { | |
| display: block; | |
| content: ""; | |
| margin-top: 4px; | |
| } | |
| .card-desc-content .icon-wrapper { | |
| display: inline-flex; | |
| align-items: center; | |
| vertical-align: middle; | |
| margin: 0 2px; | |
| } | |
| /* Live Cards (Landscape) */ | |
| .card.type-live { | |
| width: var(--card-height); | |
| height: var(--card-width); | |
| background: linear-gradient(135deg, #2a203d, #1a1525); | |
| } | |
| .card.type-live .name { | |
| font-size: 0.6rem; | |
| } | |
| .member-slot.locked { | |
| cursor: not-allowed; | |
| /* No grayscale, just disabled cursor */ | |
| } | |
| .member-slot.locked::after { | |
| /* Removed distracting border overlay */ | |
| display: none; | |
| } | |
| .lock-overlay { | |
| position: absolute; | |
| bottom: 2px; | |
| right: 2px; | |
| top: auto; | |
| left: auto; | |
| width: 16px; | |
| height: 16px; | |
| font-size: 0.7rem; | |
| background: rgba(0, 0, 0, 0.6); | |
| border-radius: 50%; | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| color: #ccc; | |
| pointer-events: none; | |
| z-index: 10; | |
| } | |
| .card-mini { | |
| width: 60px; | |
| height: 84px; | |
| } | |
| .card-mini.type-live { | |
| width: 84px; | |
| height: 60px; | |
| } | |
| /* Deck Zones */ | |
| .deck-zone { | |
| text-align: center; | |
| } | |
| .deck-stack { | |
| width: var(--card-width); | |
| height: var(--card-height); | |
| margin: 5px auto; | |
| background: linear-gradient(145deg, #4a5568, #2d3748); | |
| border-radius: 6px; | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| position: relative; | |
| box-shadow: 3px 3px 0 #1a1a2e, 5px 5px 0 #0f0f1a; | |
| } | |
| .deck-count { | |
| position: absolute; | |
| bottom: -8px; | |
| left: 50%; | |
| transform: translateX(-50%); | |
| background: var(--accent-pink); | |
| padding: 2px 8px; | |
| border-radius: 10px; | |
| font-size: 0.65rem; | |
| font-weight: bold; | |
| } | |
| .deck-stack.energy-deck { | |
| background: linear-gradient(145deg, #5a4a20, #3a3010); | |
| } | |
| .deck-stack.energy-deck .deck-count { | |
| background: var(--accent-gold); | |
| color: #000; | |
| } | |
| /* Energy Zone */ | |
| .energy-zone-cards { | |
| display: flex; | |
| gap: 5px; | |
| flex-wrap: wrap; | |
| justify-content: center; | |
| padding: 5px; | |
| } | |
| .energy-pip { | |
| width: 28px; | |
| height: 28px; | |
| border-radius: 50%; | |
| background: linear-gradient(145deg, var(--accent-gold), #d4a800); | |
| border: 2px solid #fff; | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| font-size: 0.6rem; | |
| font-weight: bold; | |
| color: #000; | |
| cursor: pointer; | |
| transition: all 0.2s; | |
| } | |
| .energy-pip:hover { | |
| transform: scale(1.1); | |
| } | |
| /* Fix for Stage Member Name Layout */ | |
| .member-slot .card-id { | |
| position: absolute; | |
| top: 2px; | |
| left: 2px; | |
| font-size: 0.55rem; | |
| background: rgba(0, 0, 0, 0.7); | |
| color: #fff; | |
| padding: 1px 3px; | |
| border-radius: 3px; | |
| cursor: copy; | |
| z-index: 5; | |
| } | |
| .member-slot .name { | |
| position: absolute; | |
| bottom: 0px; | |
| left: 0; | |
| width: 100%; | |
| background: rgba(0, 0, 0, 0.7); | |
| color: #fff; | |
| padding: 2px 4px; | |
| font-size: 0.55rem; | |
| text-align: center; | |
| white-space: nowrap; | |
| overflow: hidden; | |
| text-overflow: ellipsis; | |
| z-index: 5; | |
| box-sizing: border-box; | |
| } | |
| .member-slot .cost { | |
| position: absolute; | |
| top: 2px; | |
| right: 2px; | |
| background: var(--accent-pink); | |
| border-radius: 50%; | |
| width: 16px; | |
| height: 16px; | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| font-size: 0.55rem; | |
| font-weight: bold; | |
| z-index: 5; | |
| } | |
| /* Hover Highlights (UI Feedback) */ | |
| .highlight-target { | |
| border-color: var(--accent-green) ; | |
| box-shadow: 0 0 25px var(--accent-green), 0 0 15px var(--accent-green) inset ; | |
| transform: scale(1.08) ; | |
| z-index: 1000 ; | |
| border-width: 3px ; | |
| } | |
| .highlight-source { | |
| border-color: var(--accent-pink) ; | |
| box-shadow: 0 0 25px var(--accent-pink), 0 0 15px var(--accent-pink) inset ; | |
| transform: translateY(-15px) scale(1.05) ; | |
| z-index: 1000 ; | |
| border-width: 3px ; | |
| } | |
| /* Actions Panel */ | |
| .actions-panel { | |
| background: var(--bg-card); | |
| border: 1px solid var(--border); | |
| border-radius: 8px; | |
| padding: 8px; | |
| /* Reduced 10->8 */ | |
| display: flex; | |
| flex-direction: column; | |
| gap: 4px; | |
| /* Reduced 5->4 */ | |
| flex-shrink: 1; | |
| } | |
| .action-list { | |
| display: flex; | |
| flex-direction: column; | |
| gap: 6px; | |
| padding-right: 8px; | |
| /* Room for sidebar scrollbar */ | |
| max-height: calc(100vh - 280px); | |
| overflow-y: auto; | |
| scrollbar-width: thin; | |
| min-height: 0; | |
| } | |
| .action-btn { | |
| padding: 8px 10px; | |
| background: linear-gradient(135deg, var(--bg-zone), #2a3a4d); | |
| border: 1px solid var(--border); | |
| border-radius: 6px; | |
| color: var(--text); | |
| cursor: pointer; | |
| font-size: 0.85rem; | |
| transition: all 0.2s; | |
| display: flex; | |
| align-items: flex-start; | |
| gap: 8px; | |
| width: 100%; | |
| height: auto; | |
| min-height: 36px; | |
| flex-shrink: 0; | |
| } | |
| .action-btn:hover { | |
| background: linear-gradient(135deg, var(--accent-blue), #3a7bd5); | |
| transform: translateX(2px); | |
| } | |
| .action-title { | |
| font-weight: bold; | |
| white-space: normal; | |
| word-break: break-word; | |
| /* Ensure full text is always visible */ | |
| display: block; | |
| overflow: visible; | |
| } | |
| .action-btn.pass { | |
| background: linear-gradient(135deg, rgba(48, 160, 96, 0.2), rgba(48, 160, 96, 0.4)); | |
| border-color: var(--accent-green); | |
| color: #afffd1; | |
| } | |
| .action-btn.confirm { | |
| background: linear-gradient(135deg, rgba(255, 85, 170, 0.2), rgba(255, 85, 170, 0.4)); | |
| border-color: var(--accent-pink); | |
| text-align: center; | |
| justify-content: center; | |
| } | |
| .action-btn.golden { | |
| background: linear-gradient(135deg, rgba(245, 158, 11, 0.5), rgba(217, 119, 6, 0.8)); | |
| border-color: #fbbf24; | |
| color: #fff; | |
| font-weight: bold; | |
| box-shadow: 0 0 10px rgba(245, 158, 11, 0.4); | |
| border-width: 2px; | |
| } | |
| .action-btn.golden:hover { | |
| background: linear-gradient(135deg, #fbbf24, #f59e0b); | |
| box-shadow: 0 0 15px rgba(245, 158, 11, 0.6); | |
| transform: scale(1.02) translateX(2px); | |
| } | |
| .mulligan-indicator { | |
| background: rgba(255, 85, 170, 0.1); | |
| border: 1px solid var(--accent-pink); | |
| border-radius: 8px; | |
| padding: 12px; | |
| margin-bottom: 15px; | |
| text-align: center; | |
| } | |
| .mulligan-indicator h4 { | |
| color: var(--accent-pink); | |
| margin: 0 0 5px 0; | |
| font-size: 0.9rem; | |
| } | |
| .mulligan-indicator p { | |
| font-size: 0.75rem; | |
| color: var(--text-dim); | |
| margin: 0; | |
| } | |
| .action-group-label { | |
| text-transform: uppercase; | |
| letter-spacing: 0.5px; | |
| opacity: 0.8; | |
| border-bottom: 1px solid rgba(74, 158, 255, 0.2); | |
| padding-bottom: 2px; | |
| } | |
| .energy-pip.tapped { | |
| opacity: 0.35; | |
| filter: grayscale(0.5); | |
| } | |
| .action-source-img { | |
| width: 30px; | |
| height: 42px; | |
| border-radius: 2px; | |
| border: 1px solid rgba(255, 255, 255, 0.3); | |
| object-fit: cover; | |
| flex-shrink: 0; | |
| } | |
| /* Card Stacks (Discard, Success Lives, etc) */ | |
| .card-stack { | |
| display: flex; | |
| flex-direction: column; | |
| gap: 3px; | |
| max-height: 150px; | |
| overflow-y: auto; | |
| padding: 5px; | |
| } | |
| .card-stack-horizontal { | |
| display: flex; | |
| gap: 5px; | |
| flex-wrap: wrap; | |
| padding: 5px; | |
| justify-content: center; | |
| } | |
| /* Hand Zone */ | |
| .hand-zone { | |
| flex: 1; | |
| min-width: 300px; | |
| } | |
| .hand-cards { | |
| display: flex; | |
| gap: 6px; | |
| flex-wrap: wrap; | |
| justify-content: center; | |
| padding: 8px; | |
| background: rgba(0, 0, 0, 0.3); | |
| border-radius: 8px; | |
| min-height: 110px; | |
| } | |
| /* Resolution Zone (shared) */ | |
| .resolution-zone { | |
| background: linear-gradient(90deg, var(--bg-zone), #2a3545, var(--bg-zone)); | |
| border: 1px dashed var(--accent-purple); | |
| text-align: center; | |
| } | |
| .resolution-cards { | |
| display: flex; | |
| gap: 10px; | |
| justify-content: center; | |
| padding: 10px; | |
| min-height: 50px; | |
| } | |
| /* Old sidebar class kept for compatibility if needed, but aliased to sidebar-right in HTML */ | |
| .sidebar { | |
| /* Base styles shared */ | |
| background: var(--bg-secondary); | |
| /* border-radius: 12px; Remove radius for full height pane */ | |
| /* padding: 12px; */ | |
| border: 1px solid var(--border); | |
| display: flex; | |
| flex-direction: column; | |
| gap: 12px; | |
| overflow-y: auto; | |
| } | |
| .sidebar-section h3 { | |
| font-size: 0.8rem; | |
| color: var(--accent-blue); | |
| margin-bottom: 8px; | |
| padding-bottom: 5px; | |
| border-bottom: 1px solid var(--border); | |
| } | |
| /* Sidebar internal list spacing */ | |
| .sidebar-action-list { | |
| display: flex; | |
| flex-direction: column; | |
| gap: 8px; | |
| } | |
| .action-icon { | |
| font-size: 1rem; | |
| } | |
| .action-badge { | |
| font-size: 0.7rem; | |
| padding: 2px 6px; | |
| border-radius: 4px; | |
| background: rgba(0, 0, 0, 0.3); | |
| border: 1px solid rgba(255, 255, 255, 0.1); | |
| } | |
| /* Log Styles */ | |
| .log-controls { | |
| display: flex; | |
| justify-content: flex-end; | |
| margin-bottom: 8px; | |
| padding-bottom: 8px; | |
| border-bottom: 1px solid var(--border); | |
| } | |
| .log-btn { | |
| background: transparent; | |
| border: 1px solid var(--border); | |
| color: var(--text-dim); | |
| padding: 2px 8px; | |
| border-radius: 4px; | |
| font-size: 0.75rem; | |
| cursor: pointer; | |
| } | |
| .log-btn:hover { | |
| color: var(--text); | |
| border-color: var(--text-dim); | |
| } | |
| /* Yell Count */ | |
| .yell-badge { | |
| font-size: 0.8rem; | |
| background: linear-gradient(135deg, #e67300, #ff8c00); | |
| color: white; | |
| padding: 2px 8px; | |
| border-radius: 12px; | |
| margin-left: 8px; | |
| box-shadow: 0 2px 5px rgba(0, 0, 0, 0.3); | |
| display: inline-flex; | |
| align-items: center; | |
| gap: 4px; | |
| } | |
| /* Rule Log Styling */ | |
| .rule-log-list { | |
| display: flex; | |
| flex-direction: column; | |
| gap: 4px; | |
| flex-grow: 1; | |
| /* Take available space */ | |
| overflow-y: auto; | |
| background: rgba(0, 0, 0, 0.4); | |
| padding: 8px; | |
| border-radius: 6px; | |
| font-family: 'Courier New', Courier, monospace; | |
| font-size: 0.65rem; | |
| } | |
| .rule-entry { | |
| border-left: 2px solid var(--accent-blue); | |
| padding-left: 8px; | |
| margin-bottom: 4px; | |
| color: #ccc; | |
| } | |
| .rule-id { | |
| color: var(--accent-pink); | |
| font-weight: bold; | |
| display: block; | |
| margin-bottom: 2px; | |
| } | |
| /* God Mode */ | |
| .god-mode { | |
| background: linear-gradient(135deg, #2a1540, var(--bg-secondary)); | |
| border: 1px solid #6b3fa0; | |
| border-radius: 8px; | |
| padding: 10px; | |
| } | |
| .god-mode h3 { | |
| color: #b87aff; | |
| } | |
| .god-mode input, | |
| .god-mode textarea { | |
| width: 100%; | |
| padding: 8px; | |
| margin-bottom: 6px; | |
| background: rgba(0, 0, 0, 0.4); | |
| border: 1px solid #6b3fa0; | |
| border-radius: 5px; | |
| color: var(--text); | |
| font-family: monospace; | |
| font-size: 0.75rem; | |
| } | |
| .god-mode .btn { | |
| width: 100%; | |
| margin-bottom: 4px; | |
| background: linear-gradient(135deg, #6b3fa0, #5030a0); | |
| } | |
| /* Log */ | |
| .log-section { | |
| /* Remove flex:1 to let it shrink if needed, or fixed height */ | |
| flex: 0 0 auto; | |
| min-height: 100px; | |
| margin-bottom: 10px; | |
| } | |
| .log-list { | |
| flex: 1; | |
| overflow-y: auto; | |
| font-size: 0.85rem; | |
| padding-right: 5px; | |
| color: var(--text-dim); | |
| background: rgba(0, 0, 0, 0.3); | |
| border-radius: 5px; | |
| padding: 8px; | |
| border: 1px solid var(--border); | |
| } | |
| .turn-navigator { | |
| display: flex; | |
| gap: 5px; | |
| overflow-x: auto; | |
| padding: 5px 0; | |
| margin-bottom: 8px; | |
| border-bottom: 1px solid rgba(255, 255, 255, 0.1); | |
| scrollbar-width: thin; | |
| } | |
| .turn-nav-btn { | |
| background: rgba(255, 255, 255, 0.1); | |
| color: #ccc; | |
| border: 1px solid rgba(255, 255, 255, 0.2); | |
| border-radius: 4px; | |
| padding: 2px 8px; | |
| font-size: 0.7rem; | |
| cursor: pointer; | |
| white-space: nowrap; | |
| transition: all 0.2s; | |
| } | |
| .turn-nav-btn:hover { | |
| background: rgba(255, 255, 255, 0.2); | |
| color: white; | |
| } | |
| .turn-nav-btn.active { | |
| background: var(--accent-blue); | |
| color: white; | |
| border-color: var(--accent-blue); | |
| box-shadow: 0 0 10px rgba(0, 191, 255, 0.3); | |
| } | |
| .log-entry { | |
| padding: 2px 0; | |
| border-bottom: 1px solid rgba(255, 255, 255, 0.1); | |
| } | |
| /* Scrollbar */ | |
| ::-webkit-scrollbar { | |
| width: 6px; | |
| height: 6px; | |
| } | |
| ::-webkit-scrollbar-track { | |
| background: var(--bg-primary); | |
| } | |
| ::-webkit-scrollbar-thumb { | |
| background: var(--border); | |
| border-radius: 3px; | |
| } | |
| .action-desc { | |
| font-size: 0.7rem; | |
| opacity: 0.8; | |
| } | |
| /* Highlighting (Moved to consolidated section) */ | |
| ::-webkit-scrollbar-thumb:hover { | |
| background: var(--accent-blue); | |
| } | |
| .perf-success { | |
| background: rgba(80, 200, 80, 0.2); | |
| color: #4f4; | |
| border: 1px solid #4f4; | |
| animation: pulse 2s infinite; | |
| } | |
| .perf-failure { | |
| background: rgba(200, 80, 80, 0.2); | |
| color: #f44; | |
| border: 1px solid #f44; | |
| } | |
| @keyframes pulse { | |
| 0% { | |
| box-shadow: 0 0 0 0 rgba(76, 175, 80, 0.4); | |
| } | |
| 70% { | |
| box-shadow: 0 0 0 10px rgba(76, 175, 80, 0); | |
| } | |
| 100% { | |
| box-shadow: 0 0 0 0 rgba(76, 175, 80, 0); | |
| } | |
| } | |
| /* --- Mobile Responsiveness --- */ | |
| /* Mobile styles moved to end of file */ | |
| /* Mobile Action Toggle Button (Hidden on Desktop) */ | |
| #mobile-sidebar-toggle { | |
| display: none; | |
| position: fixed; | |
| bottom: 20px; | |
| right: 20px; | |
| width: 50px; | |
| height: 50px; | |
| border-radius: 50%; | |
| background: var(--accent-pink); | |
| color: white; | |
| font-size: 1.5rem; | |
| z-index: 1100; | |
| box-shadow: 0 4px 10px rgba(0, 0, 0, 0.5); | |
| align-items: center; | |
| justify-content: center; | |
| border: 2px solid white; | |
| } | |
| /* --- UI Polish --- */ | |
| /* Smoother transitions */ | |
| .card, | |
| .member-slot, | |
| .action-btn { | |
| transition: all 0.25s cubic-bezier(0.25, 0.8, 0.25, 1); | |
| } | |
| /* Card Hover Glow */ | |
| .card:hover { | |
| box-shadow: 0 10px 25px rgba(0, 0, 0, 0.6), 0 0 10px rgba(74, 158, 255, 0.3); | |
| border-color: var(--accent-blue); | |
| z-index: 10; | |
| } | |
| /* New Card Animation */ | |
| @keyframes slideIn { | |
| from { | |
| opacity: 0; | |
| transform: translateY(10px); | |
| } | |
| to { | |
| opacity: 1; | |
| transform: translateY(0); | |
| } | |
| } | |
| .card.new-card { | |
| animation: slideIn 0.5s ease-out; | |
| } | |
| .action-btn:hover { | |
| background: linear-gradient(135deg, rgba(74, 158, 255, 0.2), rgba(74, 158, 255, 0.1)); | |
| border-color: var(--accent-blue); | |
| } | |
| /* Header Polish */ | |
| .header { | |
| background: rgba(26, 35, 50, 0.95); | |
| backdrop-filter: blur(10px); | |
| box-shadow: 0 4px 20px rgba(0, 0, 0, 0.4); | |
| } | |
| /* Zone Titles */ | |
| .zone-title { | |
| text-transform: uppercase; | |
| letter-spacing: 1px; | |
| opacity: 0.7; | |
| font-weight: 600; | |
| } | |
| /* Scrollbar Polish */ | |
| ::-webkit-scrollbar { | |
| width: 8px; | |
| height: 8px; | |
| } | |
| ::-webkit-scrollbar-track { | |
| background: rgba(0, 0, 0, 0.2); | |
| } | |
| ::-webkit-scrollbar-thumb { | |
| background: var(--border); | |
| border-radius: 4px; | |
| } | |
| ::-webkit-scrollbar-thumb:hover { | |
| background: var(--accent-blue); | |
| } | |
| @media (max-width: 768px) { | |
| :root { | |
| /* Mobile Scaling - significantly smaller */ | |
| --card-width: 50px; | |
| --card-height: 70px; | |
| --card-width-mini: 45px; | |
| --card-height-mini: 63px; | |
| --card-width-landscape: 80px; | |
| --card-height-landscape: 57px; | |
| } | |
| .header h1 { | |
| display: none; | |
| } | |
| /* Mobile Header Optimization: Hide button text */ | |
| .header .controls .btn { | |
| padding: 3px 6px; | |
| /* Tighter padding */ | |
| } | |
| /* Specifically hide text for Update and Settings which have icons */ | |
| button[onclick="fetchState()"] .btn-text, | |
| button[onclick="openSettingsModal()"] .btn-text { | |
| display: none; | |
| } | |
| /* For Reset, it feels dangerous to be just text or hidden. Let's make it icon only? */ | |
| /* Injecting content via CSS is tricky for localization. Let's assume we can just shorten it or hide it if not critical? */ | |
| /* Actually let's just make the text smaller or hide specific classes we added */ | |
| /* Standardize: Hide text inside buttons in header controls on mobile */ | |
| .controls .btn { | |
| font-size: 0.9rem; | |
| /* Make icons larger if text is gone */ | |
| } | |
| .controls .btn span { | |
| display: none; | |
| } | |
| /* But we need to ensure Reset button has an icon then! */ | |
| /* Further Mobile: Condense Info Bar */ | |
| .info-bar .stat .stat-label { | |
| display: none; | |
| /* Hide "Turn", "Phase", "Score" labels */ | |
| } | |
| .info-bar .stat { | |
| padding: 2px 5px; | |
| /* Even tighter */ | |
| gap: 2px; | |
| } | |
| .header-main-row { | |
| gap: 5px; | |
| flex-wrap: wrap; | |
| justify-content: space-between; | |
| align-items: center; | |
| /* Ensure alignment */ | |
| } | |
| .controls { | |
| width: auto; | |
| order: 3; | |
| } | |
| body { | |
| overflow-x: hidden; | |
| /* Prevent horizontal scroll on body */ | |
| } | |
| /* Header Adjustments */ | |
| .header { | |
| padding: 4px 8px; | |
| /* Reduced horizontal padding too */ | |
| flex-direction: column; | |
| /* Stack vertically for better control */ | |
| align-items: stretch; | |
| } | |
| .header h1 { | |
| font-size: 0.9rem; | |
| text-align: center; | |
| /* Center title */ | |
| width: 100%; | |
| margin-bottom: 2px; | |
| } | |
| .stat-label { | |
| display: none; | |
| /* Hide Labels on mobile */ | |
| } | |
| /* Grid Layout for Info Bar - Middle */ | |
| .info-bar { | |
| display: grid; | |
| grid-template-columns: repeat(2, 1fr); | |
| gap: 2px; | |
| width: 100%; | |
| margin: 0; | |
| order: 2; | |
| /* Middle */ | |
| border-top: none; | |
| padding-top: 0; | |
| background: transparent; | |
| border-bottom: none; | |
| } | |
| .info-bar .stat { | |
| padding: 2px 0; | |
| font-size: 0.8rem; | |
| width: 100%; | |
| justify-content: flex-start; | |
| /* Align text left */ | |
| white-space: nowrap; | |
| } | |
| .stat-label { | |
| display: inline ; | |
| /* Show Text Titles */ | |
| margin-right: 4px; | |
| color: #aaa; | |
| font-size: 0.75rem; | |
| } | |
| .stat-icon { | |
| display: none ; | |
| /* Hide Emojis */ | |
| } | |
| .stat strong { | |
| font-size: 0.85rem; | |
| color: white; | |
| } | |
| /* Enforce single line if possible, or clean wrapping */ | |
| .header-main-row { | |
| gap: 4px; | |
| /* Reduced gap */ | |
| } | |
| /* Controls - Bottom */ | |
| .controls { | |
| width: 100%; | |
| order: 3; | |
| /* Bottom */ | |
| gap: 5px; | |
| display: flex; | |
| justify-content: center; | |
| /* Center buttons */ | |
| margin-top: 4px; | |
| padding-top: 4px; | |
| border-top: 1px solid rgba(255, 255, 255, 0.1); | |
| } | |
| .btn-text { | |
| display: none; | |
| /* Hide button text on small mobile */ | |
| } | |
| .controls .btn { | |
| padding: 6px; | |
| border-radius: 8px; | |
| /* Slightly less rounded than 50% for text-icons */ | |
| width: auto; | |
| height: 34px; | |
| justify-content: center; | |
| } | |
| .deck-discard-group { | |
| flex-direction: column; | |
| align-items: center; | |
| gap: 8px; | |
| } | |
| .card-area.deck, | |
| .card-area.energy-deck { | |
| margin: 0 auto; | |
| } | |
| .btn-primary .btn-text { | |
| display: inline; | |
| /* Allow text for Bug Report if it fits */ | |
| } | |
| .btn-primary { | |
| border-radius: 20px ; | |
| width: auto ; | |
| padding: 4px 10px ; | |
| height: auto ; | |
| } | |
| /* Game Container Stack */ | |
| .game-container { | |
| display: flex; | |
| flex-direction: column; | |
| height: auto; | |
| min-height: 100vh; | |
| padding: 5px; | |
| padding-bottom: 200px; | |
| /* Increased for Mobile Action Bar + Hand */ | |
| width: 100%; | |
| overflow-x: hidden; | |
| transition: padding-bottom 0.3s; | |
| } | |
| body.sidebar-open .game-container { | |
| padding-bottom: 50vh; | |
| /* Push content up if needed, or just let overlay happen */ | |
| } | |
| .game-board { | |
| width: 100%; | |
| overflow: visible; | |
| padding: 0; | |
| gap: 15px; | |
| /* Increase gap between sections */ | |
| } | |
| /* Mobile: Hide Left Sidebar and Resizers */ | |
| .sidebar-left, | |
| .resizer { | |
| display: none; | |
| } | |
| /* Sidebar - Bottom Sheet Style */ | |
| .sidebar { | |
| position: fixed; | |
| bottom: 0; | |
| left: 0; | |
| right: 0; | |
| width: 100%; | |
| max-width: 100%; | |
| height: 45vh; | |
| /* Occupy bottom 45% */ | |
| background: rgba(15, 20, 30, 0.98); | |
| z-index: 2000; | |
| transform: translateY(100%); | |
| transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1); | |
| box-shadow: 0 -5px 15px rgba(0, 0, 0, 0.5); | |
| padding: 10px; | |
| padding-top: 40px; | |
| /* Space for close button if keeping it, or just handle */ | |
| overflow-y: auto; | |
| border-top: 1px solid var(--border); | |
| border-radius: 12px 12px 0 0; | |
| border-left: none; | |
| border-bottom: none; | |
| top: auto; | |
| } | |
| .sidebar.active { | |
| transform: translateY(0); | |
| } | |
| .sidebar.visible { | |
| transform: translateY(0); | |
| } | |
| /* Sidebar Toggle - Float Bottom Right */ | |
| #mobile-sidebar-toggle { | |
| display: flex; | |
| position: fixed; | |
| bottom: 20px; | |
| right: 20px; | |
| width: 50px; | |
| height: 50px; | |
| border-radius: 50%; | |
| background: var(--accent-pink); | |
| color: white; | |
| font-size: 1.5rem; | |
| z-index: 2100; | |
| box-shadow: 0 4px 10px rgba(0, 0, 0, 0.5); | |
| align-items: center; | |
| justify-content: center; | |
| border: 2px solid white; | |
| transition: bottom 0.3s; | |
| } | |
| /* Move toggle up when sidebar open */ | |
| body.sidebar-open #mobile-sidebar-toggle { | |
| bottom: calc(45vh + 10px); | |
| } | |
| /* Player Sections */ | |
| .player-section { | |
| padding: 8px; | |
| width: 100%; | |
| background: rgba(26, 35, 50, 0.8); | |
| overflow: hidden; | |
| /* Prevent background bleeding */ | |
| } | |
| .board-inner { | |
| overflow-x: auto; | |
| /* Allow horizontal scroll for the board itself if it gets too narrow */ | |
| width: 100%; | |
| } | |
| .field-row { | |
| display: grid; | |
| grid-template-columns: minmax(50px, auto) 1fr minmax(60px, auto) ; | |
| gap: 6px; | |
| width: 100%; | |
| align-items: flex-start; | |
| } | |
| /* Zone Layouts - Horizontal Scroll */ | |
| .zones-row { | |
| gap: 8px; | |
| width: 100%; | |
| justify-content: flex-start; | |
| flex-wrap: nowrap; | |
| overflow-x: auto; | |
| padding-bottom: 8px; | |
| -webkit-overflow-scrolling: touch; | |
| min-height: min-content; | |
| /* Fix flex collapse */ | |
| } | |
| .zone { | |
| min-width: 75px; | |
| /* Sufficient for card width */ | |
| padding: 6px; | |
| flex-shrink: 0; | |
| } | |
| /* Stage Slots */ | |
| .stage-slots { | |
| gap: 10px; | |
| flex-wrap: nowrap; | |
| min-width: min-content; | |
| } | |
| .member-slot { | |
| width: var(--card-width); | |
| height: var(--card-height); | |
| flex-shrink: 0; | |
| } | |
| .card { | |
| flex-shrink: 0; | |
| } | |
| /* Hand Zone Specifics - Full Width on Mobile */ | |
| .hand-zone { | |
| min-width: 100%; | |
| margin-left: -8px; | |
| /* Counteract player-section padding */ | |
| margin-right: -8px; | |
| /* Counteract player-section padding */ | |
| width: calc(100% + 16px); | |
| border-right: none; | |
| border-left: none; | |
| border-radius: 0; | |
| } | |
| .hand-cards { | |
| gap: 5px; | |
| /* Use smaller gap on mobile? No we use negative margin now */ | |
| flex-wrap: nowrap; | |
| justify-content: flex-start; | |
| padding: 10px 15px; | |
| /* Comfortable touch padding */ | |
| } | |
| /* Modal Adjustments */ | |
| .modal-content { | |
| width: 95%; | |
| max-height: 85vh; | |
| padding: 15px; | |
| margin-bottom: 50px; | |
| /* Avoid bottom area overlap */ | |
| } | |
| /* Mobile Action Bar - quick access for primary actions */ | |
| #mobile-action-bar { | |
| display: flex ; | |
| /* Force show */ | |
| position: fixed; | |
| bottom: 0; | |
| left: 0; | |
| right: 0; | |
| height: 60px; | |
| background: rgba(15, 20, 30, 0.98); | |
| border-top: 2px solid var(--accent-pink); | |
| z-index: 9999; | |
| /* Max z-index */ | |
| padding: 5px 10px; | |
| gap: 10px; | |
| align-items: center; | |
| justify-content: flex-start; | |
| /* Changed from space-around to allow scrolling */ | |
| overflow-x: auto; | |
| /* Enable horizontal scroll */ | |
| white-space: nowrap; | |
| /* Prevent buttons from wrapping */ | |
| box-shadow: 0 -5px 15px rgba(0, 0, 0, 0.8); | |
| scrollbar-width: none; | |
| /* Hide scrollbar for cleaner look on mobile */ | |
| } | |
| #mobile-action-bar::-webkit-scrollbar { | |
| display: none; | |
| /* Hide scrollbar for Chrome/Safari */ | |
| } | |
| #mobile-action-bar .action-btn { | |
| flex: 1; | |
| max-width: 150px; | |
| height: 44px; | |
| font-size: 0.85rem; | |
| background: var(--accent-pink); | |
| color: white; | |
| border: none; | |
| border-radius: 8px; | |
| font-weight: bold; | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| box-shadow: 0 2px 5px rgba(0, 0, 0, 0.3); | |
| } | |
| #mobile-action-bar .action-btn.pass { | |
| background: #444 ; | |
| } | |
| #mobile-action-bar .action-btn.confirm { | |
| background: var(--accent-blue) ; | |
| } | |
| } | |
| .card.card-locked::after { | |
| /* No lightning emoji, maybe a subtle indicator if needed, but darkening cost is primary */ | |
| display: none; | |
| } | |
| .card.card-locked .cost { | |
| background: #222 ; | |
| /* Darken energy circle */ | |
| color: #777 ; | |
| border: 1px solid #444 ; | |
| box-shadow: none ; | |
| } | |
| .card.card-baton-playable .cost { | |
| background: linear-gradient(135deg, #FFD700, #FFA500) ; | |
| color: #000 ; | |
| border: 1px solid #fff ; | |
| box-shadow: 0 0 10px rgba(255, 215, 0, 0.6) ; | |
| } | |
| .card.card-playable .cost { | |
| /* Standard look, but maybe a subtle glow to signal it is ready */ | |
| box-shadow: 0 0 5px var(--accent-pink); | |
| } | |
| .card.card-playable { | |
| box-shadow: 0 0 10px var(--accent-blue); | |
| border: 2px solid var(--accent-blue) ; | |
| cursor: pointer; | |
| } | |
| /* Loader for Turn Banner */ | |
| .loader { | |
| width: 16px; | |
| height: 16px; | |
| border: 2px solid #ef5350; | |
| border-bottom-color: transparent; | |
| border-radius: 50%; | |
| display: inline-block; | |
| box-sizing: border-box; | |
| animation: rotation 1s linear infinite; | |
| vertical-align: middle; | |
| margin-right: 8px; | |
| } | |
| @keyframes rotation { | |
| 0% { | |
| transform: rotate(0deg); | |
| } | |
| 100% { | |
| transform: rotate(360deg); | |
| } | |
| } | |
| /* Card Modifiers */ | |
| .modifiers-container { | |
| position: absolute; | |
| bottom: 13px; | |
| /* Just above Name bar (approx 13px height) */ | |
| left: 0; | |
| right: 0; | |
| display: flex; | |
| flex-direction: column; | |
| gap: 1px; | |
| z-index: 8; | |
| background: rgba(0, 0, 0, 0.6); | |
| pointer-events: none; | |
| max-height: 45px; | |
| overflow-y: auto; | |
| } | |
| .modifier-line { | |
| display: flex; | |
| align-items: center; | |
| gap: 2px; | |
| padding: 1px 2px; | |
| font-size: 0.55rem; | |
| color: #fff; | |
| white-space: nowrap; | |
| overflow: hidden; | |
| text-overflow: ellipsis; | |
| border-left: 2px solid var(--accent-gold); | |
| background: rgba(245, 197, 66, 0.15); | |
| } | |
| .mod-icon { | |
| font-size: 0.6rem; | |
| flex-shrink: 0; | |
| } | |
| .mod-desc { | |
| overflow: hidden; | |
| text-overflow: ellipsis; | |
| } | |
| /* Enhanced Log Styles */ | |
| .log-entry { | |
| padding: 6px 10px; | |
| border-bottom: 1px solid rgba(255, 255, 255, 0.05); | |
| font-size: 0.85rem; | |
| line-height: 1.4; | |
| animation: slideInLeft 0.3s ease-out; | |
| } | |
| .log-entry.action { | |
| border-left: 3px solid var(--accent-blue); | |
| background: rgba(74, 158, 255, 0.05); | |
| } | |
| .log-entry.effect { | |
| border-left: 3px solid var(--accent-purple); | |
| background: rgba(168, 85, 247, 0.05); | |
| } | |
| .log-entry.turn { | |
| background: rgba(245, 197, 66, 0.1); | |
| font-weight: bold; | |
| text-align: center; | |
| border-bottom: 1px solid var(--accent-gold); | |
| color: var(--accent-gold); | |
| } | |
| .log-entry.score { | |
| color: var(--accent-green); | |
| font-weight: bold; | |
| } | |
| .log-entry.ability { | |
| border-left: 3px solid var(--accent-gold); | |
| background: rgba(255, 215, 0, 0.08); | |
| color: #ffd54f; | |
| } | |
| @keyframes slideInLeft { | |
| from { | |
| opacity: 0; | |
| transform: translateX(-10px); | |
| } | |
| to { | |
| opacity: 1; | |
| transform: translateX(0); | |
| } | |
| } | |
| /* Game Feed (Human Readable) */ | |
| .game-feed { | |
| display: flex; | |
| flex-direction: column; | |
| gap: 8px; | |
| padding: 10px; | |
| background: rgba(0, 0, 0, 0.2); | |
| border-radius: 8px; | |
| margin-bottom: 10px; | |
| max-height: 200px; | |
| overflow-y: auto; | |
| } | |
| .feed-item { | |
| display: flex; | |
| align-items: center; | |
| gap: 10px; | |
| font-size: 0.9rem; | |
| padding: 4px 0; | |
| } | |
| .feed-icon { | |
| font-size: 1.2rem; | |
| } | |
| /* Highlight Source/Target for Actions (Moved to consolidated section) */ | |
| /* --- Tablet Responsiveness (769px - 1100px) --- */ | |
| @media (min-width: 769px) and (max-width: 1100px) { | |
| .sidebar-left, | |
| .sidebar-right { | |
| width: 220px ; | |
| font-size: 0.9rem; | |
| } | |
| .field-row { | |
| grid-template-columns: minmax(70px, auto) 1fr minmax(110px, auto) ; | |
| gap: 8px; | |
| } | |
| :root { | |
| --card-width: 62px; | |
| --card-height: 87px; | |
| } | |
| } | |
| /* Board Spacing Improvements for all widths */ | |
| .game-board { | |
| display: flex; | |
| flex-direction: column; | |
| padding: 10px; | |
| gap: 15px; | |
| /* Increased gap between opponent/player sections */ | |
| max-width: 1400px; | |
| /* Prevent over-stretching on ultrawide */ | |
| margin: 0 auto; | |
| /* Center board */ | |
| } | |
| .player-section { | |
| width: 100%; | |
| margin-bottom: 20px; | |
| } | |
| /* Enable text selection for log areas */ | |
| #log, | |
| .log-list, | |
| #rule-log, | |
| .rule-log-list, | |
| #diag-content, | |
| .card-desc-content { | |
| user-select: text ; | |
| cursor: text; | |
| } |