.picture-scene { min-height: 100vh; min-height: 100dvh; padding: 18px; background: radial-gradient(circle at top, rgba(116, 58, 41, 0.28), transparent 20%), linear-gradient(180deg, #3f2119 0%, #27140f 100%); } .picture-layout { display: grid; grid-template-columns: minmax(0, 1fr) 320px; gap: 18px; align-items: stretch; min-height: calc(100vh - 36px); } .table-stage { position: relative; display: grid; place-items: center; align-content: start; width: 100%; min-height: calc(100vh - 36px); } .table-desk, .table-felt { width: 100%; max-width: 100%; max-height: calc(100dvh - 72px); aspect-ratio: 16 / 9; } .table-desk { grid-area: 1 / 1; display: block; margin-top: 18px; border-radius: 26px; object-fit: cover; box-shadow: 0 24px 44px rgba(0, 0, 0, 0.34); } .table-felt { grid-area: 1 / 1; position: relative; margin-top: 18px; border-radius: 26px; overflow: hidden; } .table-surface { position: absolute; inset: 18px; border-radius: 20px; background: radial-gradient(circle at center, rgba(255, 255, 255, 0.04), transparent 34%), linear-gradient(180deg, rgba(255, 255, 255, 0.02), rgba(0, 0, 0, 0.04) 52%, rgba(0, 0, 0, 0.08)); } .table-surface::before { content: ''; position: absolute; inset: 0; border-radius: 20px; background: radial-gradient(circle at 50% 50%, rgba(255, 255, 255, 0.03), transparent 40%), linear-gradient(180deg, rgba(255, 255, 255, 0.01), rgba(0, 0, 0, 0.06)); } .inner-outline { position: absolute; pointer-events: none; } .inner-outline.outer { inset: 22px; border-radius: 20px; border: 1px solid rgba(24, 63, 35, 0.82); box-shadow: inset 0 0 0 2px rgba(177, 112, 69, 0.3), inset 0 0 0 6px rgba(8, 36, 18, 0.18); } .inner-outline.mid { inset: 74px 92px 122px; border-radius: 20px; border: 2px solid rgba(180, 224, 187, 0.12); } .inner-outline.diamond { left: 50%; top: 50%; width: 280px; height: 280px; border: 2px solid rgba(143, 199, 155, 0.08); transform: translate(-50%, -50%) rotate(45deg); } .top-left-tools { position: absolute; top: 40px; left: 40px; display: flex; align-items: center; gap: 14px; z-index: 5; } .menu-trigger-wrap { position: relative; } .menu-trigger { transition: transform 120ms ease-out, box-shadow 120ms ease-out; } .menu-trigger.is-feedback { transform: scale(0.92); } .menu-trigger-icon { left: 40px; display: inline-block; transform-origin: center; } .menu-trigger.is-feedback .menu-trigger-icon { animation: menu-toggle-spin 170ms cubic-bezier(0.2, 0.75, 0.35, 1) 1; } .metal-circle { width: 50px; height: 50px; border: 1px solid rgba(255, 255, 255, 0.16); border-radius: 50%; color: #d7f0ff; font-size: 26px; background: linear-gradient(180deg, rgba(156, 171, 191, 0.82), rgba(79, 94, 114, 0.86)), radial-gradient(circle at 30% 25%, rgba(255, 255, 255, 0.28), transparent 42%); box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.22), 0 8px 16px rgba(0, 0, 0, 0.22); } .menu-popover { position: absolute; top: -4px; left: 58px; min-width: 128px; padding: 8px; border-radius: 10px; border: 1px solid rgba(255, 255, 255, 0.16); background: rgba(18, 20, 27, 0.94); box-shadow: 0 10px 24px rgba(0, 0, 0, 0.3); transform-origin: left top; } .menu-pop-enter-active, .menu-pop-leave-active { transition: transform 170ms cubic-bezier(0.2, 0.78, 0.3, 1), opacity 170ms ease-out; } .menu-pop-enter-from, .menu-pop-leave-to { opacity: 0; transform: scale(0.92); } .menu-pop-enter-to, .menu-pop-leave-from { opacity: 1; transform: scale(1); } .menu-list { display: flex; flex-direction: column; gap: 6px; width: 100%; } .menu-item { display: inline-flex; align-items: center; gap: 10px; width: 100%; min-height: 48px; border: 0; border-radius: 8px; color: #eaf3ff; background: transparent; text-align: left; padding: 0 10px; font-size: 15px; font-weight: 700; line-height: 1; transform: translateX(0); transition: background-color 130ms ease-out, transform 130ms ease-out; } .menu-item-icon { width: 18px; display: inline-flex; align-items: center; justify-content: center; opacity: 0.9; flex: 0 0 18px; } .menu-item-icon img { width: 16px; height: 16px; display: block; filter: brightness(0) invert(1); } .menu-item:hover { background: rgba(255, 255, 255, 0.12); transform: translateX(4px); } .menu-item:active { transform: scale(0.96); } .menu-item-danger { color: #ffd0d0; } .menu-item-delay-1, .menu-item-delay-2 { opacity: 0; transform: translateY(6px); animation: menu-item-reveal 180ms ease-out forwards; } .menu-item-delay-1 { animation-delay: 60ms; } .menu-item-delay-2 { animation-delay: 120ms; } .left-counter { display: inline-flex; align-items: center; gap: 10px; height: 42px; padding: 0 16px; border-radius: 8px; color: #fff4cf; background: rgba(13, 15, 20, 0.78); } .trust-chip { display: inline-flex; align-items: center; height: 28px; padding: 0 10px; border-radius: 999px; border: 1px solid rgba(132, 235, 166, 0.3); color: #d4ffe0; font-size: 12px; background: rgba(23, 109, 52, 0.42); } @keyframes menu-toggle-spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(90deg); } } @keyframes menu-item-reveal { 0% { opacity: 0; transform: translateY(6px); } 100% { opacity: 1; transform: translateY(0); } } .counter-light { width: 16px; height: 24px; border-radius: 3px; background: linear-gradient(180deg, #54e061 0%, #179928 100%); box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.36), 0 0 8px rgba(84, 224, 97, 0.35); } .top-right-clock { position: absolute; top: 40px; right: 40px; display: inline-flex; align-items: center; gap: 12px; padding: 8px 14px; border-radius: 10px; color: #f1f6ff; background: rgba(14, 16, 22, 0.46); z-index: 5; } .signal-chip { display: inline-flex; align-items: center; gap: 8px; } .scene-watermark { position: absolute; left: 50%; bottom: 38%; transform: translateX(-50%); text-align: center; color: rgba(7, 42, 19, 0.18); pointer-events: none; } .scene-watermark strong { display: block; font-size: clamp(30px, 4vw, 52px); line-height: 1; font-weight: 800; } .scene-watermark span, .scene-watermark small { display: block; margin-top: 6px; color: rgba(7, 42, 19, 0.24); } /* Chengdu 游戏页玩家卡:由 room.css 独立控制,避免受 global.css 同名类影响 */ .picture-scene .player-badge { position: absolute; display: flex; align-items: center; gap: 10px; min-width: 154px; padding: 9px 12px; border-radius: 16px; border: 1px solid rgba(248, 226, 173, 0.24); background: linear-gradient(180deg, rgba(43, 52, 73, 0.84), rgba(17, 22, 34, 0.82)), radial-gradient(circle at top, rgba(255, 255, 255, 0.08), transparent 40%); box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.08), 0 12px 28px rgba(0, 0, 0, 0.24); } .picture-scene .avatar-panel { position: relative; flex: 0 0 auto; } .picture-scene .player-badge.seat-top { top: 20px; left: 50%; transform: translateX(-50%); } .picture-scene .player-badge.seat-right { right: -20px; top: 50%; transform: translateY(-50%) rotate(90deg); } .picture-scene .player-badge.seat-bottom { bottom: 20px; left: 50%; transform: translateX(-50%); } .picture-scene .player-badge.seat-left { left: -20px; top: 50%; transform: translateY(-50%) rotate(90deg); } .picture-scene .player-badge.is-turn { border-color: rgba(244, 222, 163, 0.72); } .picture-scene .player-badge.offline { opacity: 0.55; } .picture-scene .avatar-card { display: grid; place-items: center; width: 48px; height: 48px; border-radius: 10px; border: 1px solid rgba(255, 248, 215, 0.32); background: linear-gradient(145deg, #b3e79c, #4eaf4a 46%, #2f7e28 100%); box-shadow: inset 0 2px 4px rgba(255, 255, 255, 0.18), 0 6px 14px rgba(0, 0, 0, 0.22); overflow: hidden; } .picture-scene .avatar-card img { width: 100%; height: 100%; object-fit: cover; } .picture-scene .player-badge.seat-right .avatar-card img, .picture-scene .player-badge.seat-left .avatar-card img { transform: rotate(-90deg); } .picture-scene .player-meta p { font-size: 14px; font-weight: 700; color: #eef5ff; } .picture-scene .player-meta .ready-chip { display: inline-flex; align-items: center; justify-content: center; margin-top: 4px; padding: 1px 8px; border-radius: 999px; color: #f7f2dd; font-size: 10px; font-weight: 700; background: linear-gradient(180deg, rgba(214, 173, 58, 0.82), rgba(125, 91, 20, 0.92)); box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.22), 0 2px 6px rgba(0, 0, 0, 0.2); } .picture-scene .player-badge.seat-right .player-meta, .picture-scene .player-badge.seat-left .player-meta { display: flex; align-items: center; justify-content: center; min-height: 48px; transform: rotate(-90deg); } .picture-scene .player-badge.seat-right .player-meta p, .picture-scene .player-badge.seat-left .player-meta p { line-height: 1; letter-spacing: 1px; white-space: nowrap; } .picture-scene .dealer-mark, .picture-scene .missing-mark { display: inline-flex; align-items: center; justify-content: center; min-width: 28px; height: 28px; border-radius: 999px; font-size: 12px; } .picture-scene .dealer-mark { position: absolute; right: -8px; bottom: -6px; background: linear-gradient(180deg, #ffe38a 0%, #f1b92e 100%); color: #5f3200; box-shadow: 0 6px 12px rgba(0, 0, 0, 0.18); } .picture-scene .missing-mark { margin-left: auto; width: 34px; height: 34px; padding: 0; overflow: hidden; background: linear-gradient(180deg, rgba(114, 219, 149, 0.2) 0%, rgba(21, 148, 88, 0.34) 100%); box-shadow: 0 6px 12px rgba(0, 0, 0, 0.16); } .picture-scene .missing-mark img { width: 22px; height: 22px; object-fit: contain; } .picture-scene .missing-mark span { color: #effff5; } .wall { position: absolute; display: flex; gap: 2px; filter: drop-shadow(0 8px 8px rgba(0, 0, 0, 0.2)); } .wall img { display: block; object-fit: contain; } .wall-top, .wall-bottom { left: 50%; transform: translateX(-50%); } .wall-left, .wall-right { top: 50%; transform: translateY(-50%); flex-direction: column; } .wall-top { top: -100px; } .wall-top img, .wall-bottom img { width: 24px; height: 36px; } .wall-right { right: 110px; gap: 0; } .wall-left { left: 110px; } .wall-left img, .wall-right img { width: 36px; height: 24px; } .wall-left img + img, .wall-right img + img { margin-top: -15px; } .wall-top img + img, .wall-bottom img + img { margin-left: -4px; } .wall-bottom { bottom: 108px; } /* 提高特异性,保证本页使用 room.css 配置值 */ .picture-scene .wall-top { top: 120px; } .picture-scene .wall-right { right: 110px; } .picture-scene .wall-bottom { bottom: 160px; } .picture-scene .wall-left { left: 110px; } .center-wind-square { position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%); z-index: 3; pointer-events: none; } .ready-toggle { position: absolute; right: 120px; bottom: 70px; display: inline-flex; align-items: center; justify-content: center; gap: 8px; min-width: 138px; height: 44px; padding: 0 16px 0 14px; border: 1px solid rgba(220, 191, 118, 0.24); border-radius: 999px; background: linear-gradient(180deg, rgba(14, 55, 40, 0.92), rgba(8, 36, 27, 0.96)), radial-gradient(circle at 20% 24%, rgba(237, 214, 157, 0.08), transparent 34%); box-shadow: inset 0 1px 0 rgba(255, 244, 214, 0.1), inset 0 -1px 0 rgba(0, 0, 0, 0.22), 0 8px 18px rgba(0, 0, 0, 0.2); z-index: 4; animation: ready-toggle-pop 180ms ease-out; } .ready-toggle-label { color: #e5c472; font-size: 14px; font-weight: 800; letter-spacing: 0.5px; text-shadow: -1px 0 rgba(0, 0, 0, 0.38), 0 1px rgba(0, 0, 0, 0.38), 1px 0 rgba(0, 0, 0, 0.38), 0 -1px rgba(0, 0, 0, 0.38); } .ready-toggle:active { transform: translateY(1px) scale(0.96); } @keyframes ready-toggle-pop { from { opacity: 0; transform: translateY(10px) scale(0.94); } to { opacity: 1; transform: translateY(0) scale(1); } } .center-desk { position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%); display: grid; grid-template-columns: repeat(2, 46px); grid-template-areas: 'north west' 'count count' 'south east'; gap: 8px; padding: 14px; border-radius: 18px; border: 2px solid rgba(69, 55, 38, 0.72); background: linear-gradient(135deg, rgba(107, 51, 41, 0.94), rgba(33, 35, 32, 0.96) 50%, rgba(26, 69, 36, 0.92)), radial-gradient(circle at center, rgba(255, 255, 255, 0.06), transparent 52%); box-shadow: 0 12px 24px rgba(0, 0, 0, 0.22); } .center-desk strong { grid-area: count; text-align: center; font-size: 32px; color: #3ec37f; letter-spacing: 3px; } .wind { display: grid; place-items: center; width: 42px; height: 42px; border-radius: 10px; background: rgba(0, 0, 0, 0.18); color: rgba(255, 255, 255, 0.68); font-weight: 700; } .wind.north { grid-area: north; } .wind.west { grid-area: west; } .wind.south { grid-area: south; } .wind.east { grid-area: east; } .floating-status { position: absolute; display: inline-flex; align-items: center; gap: 8px; color: #ffcf4d; font-size: clamp(24px, 2.6vw, 42px); font-weight: 800; text-shadow: 0 0 12px rgba(255, 195, 0, 0.32), 0 3px 0 rgba(130, 74, 0, 0.4); pointer-events: none; } .floating-status img { width: 40px; height: 40px; object-fit: contain; filter: drop-shadow(0 6px 10px rgba(0, 0, 0, 0.2)); } .floating-status.top { top: 48px; left: 50%; transform: translateX(-50%); } .floating-status.left { left: 24%; top: 50%; transform: translate(-50%, -50%); } .floating-status.right { right: 24%; top: 50%; transform: translate(50%, -50%); } .claim-banner { position: absolute; left: 50%; top: 58%; transform: translate(-50%, -50%); min-width: 380px; padding: 14px 20px; border-radius: 10px; text-align: center; color: #eef7ef; background: rgba(13, 31, 17, 0.24); } .claim-banner span { display: block; font-size: 14px; opacity: 0.8; } .claim-banner strong { display: block; margin-top: 2px; font-size: 18px; } .bottom-control-panel { position: absolute; left: 50%; bottom: 8px; transform: translateX(-50%); width: min(100% - 120px, 1180px); padding: 8px 14px 12px; } .control-copy { margin-bottom: 10px; text-align: center; color: rgba(239, 247, 237, 0.84); } .control-copy p { font-size: 14px; font-weight: 700; } .control-copy small { font-size: 12px; } .action-orbs { position: absolute; right: 38px; top: -66px; display: flex; align-items: center; gap: 12px; } .orb-button { width: 76px; height: 76px; border: 0; border-radius: 50%; font-size: 26px; font-weight: 800; cursor: pointer; box-shadow: inset 0 3px 8px rgba(255, 255, 255, 0.18), 0 10px 20px rgba(0, 0, 0, 0.22); } .orb-button.theme-gold { color: #8a4e00; background: radial-gradient(circle at 35% 28%, #fff7bf 0%, #ffd85d 42%, #d89a19 100%); } .orb-button.theme-jade { color: #efffff; background: radial-gradient(circle at 35% 28%, #c4fff2 0%, #3ad8b4 42%, #00876e 100%); } .orb-button.theme-blue { color: #effff2; background: radial-gradient(circle at 35% 28%, #bff2c8 0%, #6bc77c 42%, #2e7a43 100%); } .orb-button:disabled { opacity: 0.5; cursor: not-allowed; } .player-hand { display: flex; align-items: flex-end; justify-content: center; gap: 4px; overflow-x: auto; padding-bottom: 2px; } .tile-chip { min-width: 90px; height: 126px; border: 1px solid rgba(70, 80, 92, 0.18); border-radius: 8px; color: #14181d; font-size: 32px; font-weight: 700; background: linear-gradient(180deg, #ffffff 0%, #f8fafc 68%, #dfe6ed 100%); box-shadow: inset 0 -4px 0 #1ea328, inset 0 1px 0 rgba(255, 255, 255, 0.9), 0 6px 12px rgba(0, 0, 0, 0.18); cursor: pointer; } .tile-chip.selected { transform: translateY(-18px); } .empty-hand { text-align: center; color: rgba(237, 244, 253, 0.82); font-size: 13px; } .table-side-buttons { position: absolute; right: 18px; top: 42%; transform: translateY(-50%); display: flex; flex-direction: column; gap: 12px; } .side-round { width: 56px; height: 56px; border: 0; border-radius: 50%; color: #edf8ef; font-size: 22px; font-weight: 700; background: linear-gradient(180deg, rgba(126, 140, 122, 0.82), rgba(59, 72, 57, 0.86)), radial-gradient(circle at 35% 28%, rgba(255, 255, 255, 0.22), transparent 40%); box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 8px 14px rgba(0, 0, 0, 0.22); } .side-round.gold { color: #7a4600; background: radial-gradient(circle at 35% 28%, #fff6c2 0%, #ffe16c 42%, #e3aa23 100%); } .ws-sidebar { display: flex; flex-direction: column; height: calc(100vh - 36px); min-height: calc(100vh - 36px); padding: 16px; border-radius: 18px; border: 1px solid rgba(255, 226, 175, 0.12); background: linear-gradient(180deg, rgba(45, 24, 18, 0.94), rgba(26, 14, 11, 0.96)), radial-gradient(circle at top, rgba(255, 219, 154, 0.06), transparent 40%); box-shadow: 0 16px 28px rgba(0, 0, 0, 0.22); } .sidebar-head { display: flex; justify-content: space-between; gap: 12px; align-items: flex-start; } .sidebar-title { font-size: 18px; font-weight: 800; color: #ffe2a0; } .sidebar-head small { color: rgba(248, 233, 199, 0.68); } .sidebar-btn { min-width: 76px; height: 38px; border: 1px solid rgba(255, 223, 164, 0.16); border-radius: 999px; color: #ffe9b7; background: rgba(0, 0, 0, 0.18); } .sidebar-stats { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; margin-top: 16px; } .sidebar-stat { padding: 12px; border-radius: 14px; background: rgba(255, 255, 255, 0.04); } .sidebar-stat span { display: block; font-size: 11px; color: rgba(244, 233, 208, 0.62); } .sidebar-stat strong { display: block; margin-top: 6px; color: #fff0c2; font-size: 15px; word-break: break-word; } .sidebar-error { margin-top: 14px; color: #ffc1c1; font-size: 13px; } .sidebar-log { flex: 1 1 auto; margin-top: 14px; padding: 12px; border-radius: 14px; background: rgba(9, 12, 19, 0.34); overflow: auto; } .sidebar-empty, .sidebar-line { font-size: 12px; color: #e6eef8; line-height: 1.5; } .sidebar-line + .sidebar-line { margin-top: 8px; padding-top: 8px; border-top: 1px solid rgba(255, 255, 255, 0.06); } @media (max-width: 1280px) { .picture-layout { grid-template-columns: 1fr; } .table-desk, .table-felt { width: min(100%, calc((100dvh - 290px) * 16 / 9)); } .ws-sidebar { height: auto; min-height: 240px; } } @media (max-width: 980px) { .picture-scene { padding: 10px; } .table-desk, .table-felt { width: 100%; margin-top: 8px; } .wall-right { right: 88px; } .wall-left { left: 88px; } .inner-outline.mid { inset: 70px 72px 120px; } .tile-chip { min-width: 70px; height: 102px; font-size: 24px; } .action-orbs { right: 18px; top: -54px; } .orb-button { width: 62px; height: 62px; font-size: 22px; } } @media (max-width: 640px) { .table-desk, .table-felt { aspect-ratio: 9 / 16; } .inner-outline.mid { inset: 92px 34px 190px; } .inner-outline.diamond { width: 180px; height: 180px; } .wall-top, .wall-bottom { display: none; } .wall-left { left: 32px; } .wall-right { right: 32px; } .floating-status.left, .floating-status.right { display: none; } .claim-banner { min-width: 0; width: calc(100% - 40px); } .bottom-control-panel { width: calc(100% - 20px); } .action-orbs { position: static; justify-content: center; margin-bottom: 10px; } .tile-chip { min-width: 48px; height: 76px; font-size: 16px; } .table-side-buttons { right: 10px; gap: 8px; } .side-round { width: 46px; height: 46px; font-size: 18px; } }