* { box-sizing: border-box; } html { min-height: 100%; -webkit-text-size-adjust: 100%; } body { margin: 0; min-height: 100vh; min-height: 100dvh; overflow-x: hidden; font-family: 'Kanit', 'Prompt', 'Sarabun', 'Segoe UI', system-ui, sans-serif; color: #fff; background: #0a0b1e; } .join-bg { position: fixed; inset: 0; z-index: 0; overflow: hidden; } .join-bg-img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; object-position: center; } .join-char-layer { position: fixed; inset: 0; z-index: 1; pointer-events: none; display: flex; justify-content: center; align-items: center; } .join-char-img { width: 100%; height: 100%; max-height: 72vh; object-fit: contain; object-position: center; } .join-vignette { position: fixed; inset: 0; z-index: 2; pointer-events: none; background: radial-gradient(ellipse at center, transparent 0%, transparent 30%, rgba(0, 0, 0, 0.3) 50%, rgba(0, 0, 0, 0.6) 70%, rgba(0, 0, 0, 0.85) 85%, rgba(0, 0, 0, 0.95) 100%); } .join-ui { position: relative; z-index: 3; min-height: 100vh; min-height: 100dvh; display: flex; flex-direction: column; padding: max(12px, env(safe-area-inset-top)) max(12px, env(safe-area-inset-right)) max(12px, env(safe-area-inset-bottom)) max(12px, env(safe-area-inset-left)); } .join-back-section { position: fixed; top: max(12px, env(safe-area-inset-top)); left: max(12px, env(safe-area-inset-left)); z-index: 10; } .join-btn-back { padding: 0; border: none; background: transparent; cursor: pointer; -webkit-tap-highlight-color: transparent; } .join-btn-back-img { display: block; width: clamp(40px, 10vw, 60px); height: auto; } .join-content { width: 100%; max-width: min(96vw, 720px); margin: 0 auto; padding: clamp(44px, 9vh, 76px) clamp(14px, 3.5vw, 22px) clamp(24px, 5vh, 40px); display: flex; flex-direction: column; align-items: center; gap: clamp(0.85rem, 2.5vw, 1.35rem); } .join-header { text-align: center; } .join-title-img { display: block; width: min(88vw, 420px); height: auto; image-rendering: -webkit-optimize-contrast; filter: drop-shadow(0 0 16px rgba(191, 0, 255, 0.55)); } /* กล่องหลักตาม mock — bg-pop */ .join-panel { width: 100%; padding: clamp(14px, 3vw, 22px) clamp(12px, 2.5vw, 20px) clamp(16px, 3vw, 24px); border-radius: 10px; background-image: url('IMAGE/bg-pop.png'); background-size: 100% 100%; background-repeat: no-repeat; background-position: center; box-shadow: 0 0 20px rgba(0, 255, 255, 0.25), 0 0 40px rgba(191, 0, 255, 0.15); } .join-tabs { display: flex; flex-direction: row; justify-content: center; align-items: flex-end; gap: clamp(0.5rem, 2vw, 1rem); margin-bottom: clamp(12px, 2.5vw, 18px); } .join-tab { padding: 0; border: none; background: transparent; cursor: pointer; -webkit-tap-highlight-color: transparent; flex: 0 1 auto; } .join-tab:focus-visible { outline: 2px solid #00ffff; outline-offset: 4px; } .join-tab-img { display: block; width: clamp(140px, 38vw, 220px); height: auto; image-rendering: -webkit-optimize-contrast; } .join-view--hidden { display: none !important; } /* พื้นที่สกรอล + แถบเลื่อนตาม asset */ .join-list-scroll { position: relative; padding-right: clamp(10px, 2.5vw, 16px); margin-right: -4px; } .join-list-scroll::after { content: ''; position: absolute; top: 0; right: 0; width: 14px; height: 100%; background: url('IMAGE/join-room-scrollbar-bg.png') center top / 100% 100% no-repeat; pointer-events: none; opacity: 0.95; border-radius: 4px; } .join-list { max-height: min(48vh, 420px); overflow-y: auto; overflow-x: hidden; padding-right: 6px; display: flex; flex-direction: column; /* gap: clamp(0.25rem, 1vw, 0.45rem); */ } .join-list::-webkit-scrollbar { width: 10px; } .join-list::-webkit-scrollbar-track { background: rgba(0, 40, 60, 0.4); border-radius: 4px; } .join-list::-webkit-scrollbar-thumb { background: url('IMAGE/join-room-scrollbar.png') center / contain no-repeat; background-color: rgba(0, 255, 255, 0.35); border-radius: 4px; min-height: 40px; } .join-list { scrollbar-width: thin; scrollbar-color: rgba(0, 255, 255, 0.5) rgba(0, 40, 60, 0.4); } .join-list-status { padding: 1rem; font-size: clamp(0.8rem, 2vw, 0.92rem); color: rgba(255, 255, 255, 0.85); text-align: center; } /* แถวห้อง — bg-room-name */ .join-room-row { width: 100%; } .join-room-row-inner { display: flex; flex-direction: row; align-items: center; justify-content: space-between; gap: clamp(0.35rem, 1.2vw, 0.75rem); height: clamp(64px, 14vw, 90px); padding: clamp(8px, 2vw, 12px) clamp(10px, 2.5vw, 16px); background-image: url('IMAGE/bg-room-name.png'); background-size: 100% 100%; background-repeat: no-repeat; background-position: center; } .join-room-name { flex: 1 1 auto; min-width: 0; font-size: clamp(0.72rem, 1.9vw, 0.88rem); font-weight: 700; color: #fff; text-shadow: 0 0 8px rgba(0, 255, 255, 0.25); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; padding-left: 1em; line-height: 1.3; } .join-room-players { flex: 0 0 auto; font-size: clamp(0.72rem, 1.9vw, 0.88rem); font-weight: 600; color: #fff; white-space: nowrap; line-height: 1.3; } .join-room-btn { flex: 0 0 auto; padding: 0; border: none; background: transparent; cursor: pointer; -webkit-tap-highlight-color: transparent; } .join-room-btn:disabled { cursor: not-allowed; opacity: 0.85; filter: grayscale(0.35) brightness(0.65); } .join-room-btn-img { display: block; width: clamp(72px, 20vw, 110px); height: auto; image-rendering: -webkit-optimize-contrast; } /* แท็บห้องส่วนตัว — ฟอร์ม */ .join-private-form { display: flex; flex-direction: column; gap: clamp(0.75rem, 2vw, 1.1rem); padding-top: clamp(4px, 1vw, 8px); } .join-private-row { display: flex; flex-direction: row; align-items: center; flex-wrap: wrap; gap: clamp(0.6rem, 2.2vw, 1rem); } .join-private-label-img { display: block; height: clamp(28px, 6.5vw, 40px); width: auto; object-fit: contain; image-rendering: -webkit-optimize-contrast; flex: 0 0 auto; } .join-private-label-img--pass { height: clamp(26px, 6vw, 36px); } .join-textfield-wrap { position: relative; flex: 1 1 auto; min-width: 200px; max-width: min(100%, 75%); height: clamp(48px, 11vw, 60px); } .join-textfield-wrap--narrow { flex: 0 1 auto; min-width: 160px; max-width: 260px; } .join-textfield-wrap::before { content: ''; position: absolute; inset: 0; background-image: url('IMAGE/textfield.png'); background-size: cover; background-repeat: no-repeat; background-position: center; pointer-events: none; z-index: 1; } .join-textfield-input, input.join-textfield-input, #join-private-room-id.join-textfield-input { position: relative; z-index: 2; width: 100% !important; height: 100% !important; padding-top: clamp(0.35rem, 1vw, 0.55rem) !important; padding-bottom: clamp(0.35rem, 1vw, 0.55rem) !important; padding-left: clamp(0.85rem, 2.2vw, 1.15rem) !important; padding-right: clamp(0.85rem, 2.2vw, 1.15rem) !important; border: none !important; background: transparent !important; color: #fff; font-size: clamp(0.88rem, 2.2vw, 1.02rem); font-weight: 600; font-family: inherit; line-height: 1.5; outline: none; box-sizing: border-box; } #join-private-room-id.join-textfield-input { padding-left: 2.5em !important; } .join-textfield-input--code, #join-private-password.join-textfield-input { padding-left: 0 !important; padding-right: 0 !important; } .join-textfield-input--code { text-align: center; font-family: 'Courier New', monospace; letter-spacing: 0.18em; font-size: clamp(0.95rem, 2.5vw, 1.15rem); } .join-textfield-input::placeholder { color: rgba(255, 255, 255, 0.35); } .join-private-submit { align-self: center; padding: 0; margin-top: 0.25rem; border: none; background: transparent; cursor: pointer; -webkit-tap-highlight-color: transparent; } .join-private-submit:disabled { cursor: not-allowed; opacity: 0.6; } .join-private-submit-img { display: block; width: min(72vw, 280px); height: auto; image-rendering: -webkit-optimize-contrast; } @media (max-width: 520px) { .join-room-row-inner { flex-wrap: wrap; justify-content: center; text-align: center; } .join-room-name, .join-room-players { width: 100%; text-align: center; } .join-room-btn { margin-top: 0.25rem; } }