* { box-sizing: border-box; } @font-face { font-family: 'NotoSansThai'; src: url('../FONTS/NotoSansThai-ExtraBold.ttf') format('truetype'); font-weight: 100 900; font-style: normal; font-display: swap; } @font-face { font-family: 'NotoSansThaiMedium'; src: url('../FONTS/NotoSansThai-Medium.ttf') format('truetype'); font-weight: 500; font-style: normal; font-display: swap; } html { min-height: 100%; -webkit-text-size-adjust: 100%; } body { margin: 0; min-height: 100vh; min-height: 100dvh; overflow-x: hidden; font-family: 'Kanit', 'Sarabun', 'Segoe UI', system-ui, sans-serif; color: #fff; background: #030712; } .qb-bg { position: fixed; inset: 0; z-index: 0; } .qb-bg-img { width: 100%; height: 100%; object-fit: cover; object-position: center; } .qb-vignette { position: fixed; inset: 0; z-index: 1; pointer-events: none; background: radial-gradient(ellipse at 50% 25%, transparent 15%, rgba(0, 0, 0, 0.4) 100%); } .qb-ui { --qb-ui-scale: 1; position: relative; z-index: 2; min-height: 100vh; min-height: 100dvh; padding: max(calc(10px * var(--qb-ui-scale)), env(safe-area-inset-top)) max(calc(12px * var(--qb-ui-scale)), env(safe-area-inset-right)) max(calc(14px * var(--qb-ui-scale)), env(safe-area-inset-bottom)) max(calc(12px * var(--qb-ui-scale)), env(safe-area-inset-left)); overflow: hidden; } .qb-top { position: absolute; top: max(calc(10px * var(--qb-ui-scale)), env(safe-area-inset-top)); left: max(calc(12px * var(--qb-ui-scale)), env(safe-area-inset-left)); right: max(calc(12px * var(--qb-ui-scale)), env(safe-area-inset-right)); display: flex; align-items: flex-start; justify-content: flex-end; gap: calc(8px * var(--qb-ui-scale)); min-height: calc(157px * var(--qb-ui-scale)); z-index: 6; pointer-events: none; } .qb-top-fill { flex: 1; min-width: calc(8px * var(--qb-ui-scale)); pointer-events: none; } /* กรอบแดง 1: ใช้ layout แบบ Join Room back button */ .qb-join-back { position: fixed; top: max(2px, env(safe-area-inset-top)); left: max(2px, env(safe-area-inset-left)); padding: 0; border: none; background: transparent; cursor: pointer; z-index: 20; pointer-events: auto; -webkit-tap-highlight-color: transparent; } .qb-join-back-img { --qb-exit-btn-height: 142px; display: block; height: var(--qb-exit-btn-height); width: calc(var(--qb-exit-btn-height) * (122 / 142)); object-fit: contain; } /* กรอบแดง 2: ใช้ layout แบบ room-lobby-profile-avatar-viewport */ .qb-room-profile-wrap { flex-shrink: 0; pointer-events: none; } .qb-room-profile-frame { position: relative; width: 159px; height: 157px; min-width: 159px; min-height: 157px; max-width: 159px; max-height: 157px; aspect-ratio: 159 / 157; border-radius: 0; border: none; overflow: hidden; background: url(../Game/img/btn-profile-bg.png) center/100% 100% no-repeat; box-shadow: none; } .qb-room-profile-avatar-viewport { position: absolute; left: 18px; top: 10px; width: 124px; height: 118px; overflow: hidden; border-radius: 12px; } .qb-room-profile-avatar { position: absolute; left: 50%; top: 5px; display: block; width: 120%; height: auto; max-width: none; object-fit: contain; object-position: center top; transform: translateX(-50%); transform-origin: center center; image-rendering: pixelated; image-rendering: crisp-edges; pointer-events: none; } .qb-main { --qb-main-scale: 1; --qb-banner-width: calc(419px * var(--qb-main-scale)); --qb-banner-height: calc(151px * var(--qb-main-scale)); --qb-card-width: calc(271px * var(--qb-main-scale)); --qb-card-height: calc(351px * var(--qb-main-scale)); --qb-card-start-height: calc(83px * var(--qb-main-scale)); --qb-card-start-width: calc(168px * var(--qb-main-scale)); --qb-grid-gap-x: calc(18px * var(--qb-main-scale)); --qb-grid-gap-y: calc(14px * var(--qb-main-scale)); --qb-main-gap-banner-grid: calc(12px * var(--qb-main-scale)); --qb-main-gap-grid-toast: calc(8px * var(--qb-main-scale)); position: relative; z-index: 3; width: 100%; height: calc(100dvh - max(calc(10px * var(--qb-ui-scale)), env(safe-area-inset-top)) - max(calc(14px * var(--qb-ui-scale)), env(safe-area-inset-bottom))); flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: flex-start; min-height: 0; overflow: hidden; padding-top: calc(2px * var(--qb-main-scale)); } .qb-main::-webkit-scrollbar { width: 0; height: 0; } .qb-main::-webkit-scrollbar-track { background: transparent; } .qb-main::-webkit-scrollbar-thumb { background: transparent; } .qb-room-banner { flex: 0 0 auto; width: var(--qb-banner-width); height: var(--qb-banner-height); max-width: 100%; flex-shrink: 0; margin: 0 auto var(--qb-main-gap-banner-grid); margin-top: calc(60px * var(--qb-main-scale)); } .qb-room-banner img { display: block; width: 100%; height: 100%; object-fit: contain; filter: drop-shadow(0 8px 24px rgba(0, 0, 0, 0.35)); } .qb-grid { width: auto; max-width: 100%; display: grid; grid-template-columns: repeat(5, var(--qb-card-width)); grid-auto-rows: var(--qb-card-height); justify-content: center; align-content: start; column-gap: var(--qb-grid-gap-x); row-gap: var(--qb-grid-gap-y); padding: 0; } .qb-card { position: relative; width: var(--qb-card-width); height: var(--qb-card-height); padding: 0; border: none; background: transparent; border-radius: 8px; cursor: default; overflow: hidden; -webkit-tap-highlight-color: transparent; } .qb-card-room { display: block; width: 100%; height: 100%; object-fit: contain; pointer-events: none; user-select: none; } .qb-card-start { position: absolute; left: 50%; bottom: calc(25px * var(--qb-main-scale)); transform: translateX(-50%); width: var(--qb-card-start-width); height: var(--qb-card-start-height); border: none; padding: 0; background: transparent; cursor: pointer; z-index: 2; transition: transform 0.14s ease, filter 0.14s ease; } .qb-card-start:hover, .qb-card-start:focus-visible { transform: translateX(-50%) translateY(-1px); filter: brightness(1.06); } .qb-card-start:focus-visible { outline: 2px solid #22d3ee; outline-offset: 3px; border-radius: 8px; } .qb-card-start:active { transform: translateX(-50%) translateY(0); } .qb-card-start img { display: block; width: 100%; height: 100%; object-fit: contain; pointer-events: none; } .qb-card-count { position: absolute; top: calc(44px * var(--qb-main-scale)); right: calc(54px * var(--qb-main-scale)); font-family: 'NotoSansThaiMedium', 'NotoSansThai', 'Kanit', 'Sarabun', system-ui, sans-serif; font-size: calc(22px * var(--qb-main-scale)); font-weight: 500; line-height: 1; color: #ffffff; letter-spacing: 0; text-shadow: 0 0 calc(10px * var(--qb-main-scale)) rgba(87, 239, 255, 0.55), 0 0 calc(2px * var(--qb-main-scale)) rgba(0, 0, 0, 0.65); pointer-events: none; user-select: none; z-index: 3; } .qb-toast { text-align: center; font-size: calc(20px * var(--qb-main-scale)); color: rgba(248, 250, 252, 0.88); line-height: 1.2; min-height: calc(24px * var(--qb-main-scale)); margin-top: var(--qb-main-gap-grid-toast); flex-shrink: 0; padding: 0 calc(8px * var(--qb-main-scale)) calc(4px * var(--qb-main-scale)); } /* มุมขวาล่าง — btn-voice (ซ่อนไว้ก่อน: ทับการ์ด Room 09–10 ในหน้าเลือกห้อง) */ .qb-room-lobby-br-fixed { --lobby-br-btn: calc(121px * var(--qb-ui-scale, 1)); display: none !important; visibility: hidden !important; pointer-events: none !important; position: fixed; bottom: max(calc(0.95rem * var(--qb-ui-scale, 1)), env(safe-area-inset-bottom)); right: max(calc(1.25rem * var(--qb-ui-scale, 1)), env(safe-area-inset-right)); z-index: 400; flex-direction: row; align-items: flex-end; gap: calc(10px * var(--qb-ui-scale, 1)); pointer-events: none; } .qb-room-lobby-br-fixed .btn-voice-icon { pointer-events: auto; box-sizing: border-box; width: var(--lobby-br-btn); height: var(--lobby-br-btn); min-width: var(--lobby-br-btn); min-height: var(--lobby-br-btn); max-width: var(--lobby-br-btn); max-height: var(--lobby-br-btn); margin: 0; padding: 0; border: none; border-radius: 0; appearance: none; -webkit-appearance: none; flex-shrink: 0; cursor: pointer; background: transparent; box-shadow: none; display: flex; align-items: center; justify-content: center; } .qb-room-lobby-br-fixed .btn-voice-icon img { width: 100%; height: 100%; max-width: 100%; max-height: 100%; object-fit: contain; object-position: center; display: block; pointer-events: none; user-select: none; -webkit-user-drag: none; }