:root { --create-bg-deep: #000511; --create-cyan: #22d3ee; --create-cyan-dim: rgba(34, 211, 238, 0.45); --create-purple: #a855f7; --create-magenta: #bc00ff; --create-panel-bg: rgba(0, 5, 17, 0.72); --create-text: #f8fafc; } * { 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: 'NotoSansThai', 'Kanit', 'Sarabun', 'Segoe UI', system-ui, sans-serif; color: var(--create-text); background: var(--create-bg-deep); } @font-face { font-family: 'NotoSansThai'; src: url('FONTS/NotoSansThai-Medium.ttf') format('truetype'); font-weight: 500; font-style: normal; font-display: swap; } /* ================================================== */ /* Background layers */ /* ================================================== */ .create-bg { position: fixed; inset: 0; z-index: 0; overflow: hidden; background: radial-gradient(ellipse 80% 60% at 50% 20%, rgba(88, 28, 135, 0.25), transparent 55%), radial-gradient(ellipse 70% 50% at 80% 80%, rgba(34, 211, 238, 0.08), transparent 50%), var(--create-bg-deep); } .create-bg-grid { position: absolute; inset: 0; opacity: 0.12; background-image: linear-gradient(rgba(34, 211, 238, 0.35) 1px, transparent 1px), linear-gradient(90deg, rgba(168, 85, 247, 0.25) 1px, transparent 1px); background-size: 48px 48px; pointer-events: none; } .create-bg-img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; object-position: center; opacity: 0.35; mix-blend-mode: screen; } .create-char-layer { position: fixed; inset: 0; z-index: 0; pointer-events: none; display: flex; justify-content: center; align-items: center; } .create-char-img { width: 100%; height: 100%; max-height: 72vh; object-fit: contain; object-position: center; opacity: 0.85; filter: brightness(0.62) drop-shadow(0 0 40px rgba(168, 85, 247, 0.35)); } .create-vignette { position: fixed; inset: 0; z-index: 2; pointer-events: none; background: radial-gradient(ellipse at center, transparent 0%, rgba(0, 0, 0, 0.25) 55%, rgba(0, 0, 0, 0.82) 100%); } /* ================================================== */ /* UI container */ /* ================================================== */ .create-ui { position: relative; z-index: 3; min-height: 100vh; min-height: 100dvh; padding: max(14px, env(safe-area-inset-top)) max(14px, env(safe-area-inset-right)) max(20px, env(safe-area-inset-bottom)) max(14px, env(safe-area-inset-left)); } /* ================================================== */ /* Back button */ /* ================================================== */ .create-ui .menu-btn-back { position: fixed; top: max(clamp(0.5rem, 2vw, 2rem), env(safe-area-inset-top)); left: max(clamp(0.5rem, 2vw, 2rem), env(safe-area-inset-left)); padding: 0; border: none; background: none; cursor: pointer; z-index: 20; -webkit-tap-highlight-color: transparent; } .create-ui .menu-btn-back-img { display: block; width: clamp(40px, 10vw, 60px); height: auto; object-fit: contain; } /* ================================================== */ /* Content wrapper */ /* ================================================== */ .create-content { width: 100%; max-width: min(94vw, 680px); margin: 0 auto; padding: clamp(34px, 7.5vh, 72px) 0 clamp(16px, 3vh, 30px); display: flex; flex-direction: column; align-items: center; } @media (min-width: 900px) { .create-content { max-width: min(88vw, 640px); } } @media (min-width: 1400px) { .create-content { max-width: min(82vw, 720px); } } @media (min-width: 1025px) { .create-content { width: min(calc(90dvh * 640 / 657), calc(100vw - 20px)); max-width: none; height: 90dvh; min-height: 90dvh; max-height: 90dvh; aspect-ratio: 640 / 657; margin: 0 auto; padding-left: 10px; padding-right: 10px; padding-top: 0; padding-bottom: 0; justify-content: center; align-items: center; } .create-char-layer { transform: translateY(10%); justify-content: center; align-items: center; } .create-char-img { object-position: center center; } .create-ui .menu-btn-back-img { width: 112px; height: 139px; } } /* ================================================== */ /* Title image */ /* ================================================== */ .create-title-img { display: block; width: clamp(250px, 38vw, 390px); height: auto; margin-inline: auto; margin-bottom: clamp(0.3rem, 1vh, 0.8rem); object-fit: contain; filter: drop-shadow(0 0 16px rgba(188, 0, 255, 0.5)); } .create-title-line { display: block; width: 72%; max-width: 72%; height: auto; margin: 0 auto 1.4cqh; opacity: 0.85; filter: drop-shadow(0 0 10px rgba(34, 211, 238, 0.4)); } /* ================================================== */ /* Panel (form container) */ /* ================================================== */ .create-panel { width: 100%; max-width: 640px; min-height: clamp(460px, 62vh, 620px); padding: clamp(14px, 2vh, 22px) clamp(10px, 1.4vw, 16px) clamp(14px, 2vh, 22px); border: none; background: transparent; box-shadow: none; backdrop-filter: none; } /* ================================================== */ /* Label images */ /* ================================================== */ .create-label-img { display: block; height: clamp(24px, 6.2vw, 44px); width: auto; margin-bottom: 0; object-fit: contain; filter: drop-shadow(0 0 8px rgba(34, 211, 238, 0.5)); } .create-label-img--password { height: clamp(24px, 6.2vw, 44px); margin-bottom: 0.2rem; } /* ================================================== */ /* Line separator */ /* ================================================== */ .create-line { display: block; width: min(100%, 640px); height: auto; margin: clamp(5px, 1vh, 10px) 0; opacity: 0.5; } .create-panel .create-line { display: none; } /* ================================================== */ /* Fields */ /* ================================================== */ .create-field { margin-bottom: clamp(4px, 0.8vh, 9px); } .create-field--players { margin-bottom: clamp(6px, 1vh, 10px); } .create-field--inline { display: flex; align-items: center; justify-content: flex-end; gap: clamp(8px, 1.2vw, 14px); white-space: nowrap; } .create-field--mode { align-items: center; } /* ================================================== */ /* Input shell (textfield background image) */ /* ================================================== */ .create-input-shell { position: relative; background: url('IMAGE/roomname-textfield.png') center / 100% 100% no-repeat; border: none; padding: 0; transition: filter 0.2s; width: 100%; } .create-field--room .create-input-shell { width: 69%; max-width: 69%; } .create-input-shell:focus-within { filter: brightness(1.15); } .create-input-shell--pin { background-image: url('IMAGE/password-textfield.png'); width: 30%; max-width: 30%; margin-top: 0.15rem; } .create-input { width: 100%; margin: 0; padding: clamp(18px, 5vw, 25px) clamp(18px, 7vw, 40px); border: none; background: transparent; color: #fff; font-family: inherit; font-size: clamp(1rem, 1.8vw, 1.2rem); font-weight: 600; outline: none; } .create-input::placeholder { color: rgba(248, 250, 252, 0.35); } .create-input--pin { text-align: center; letter-spacing: 0.2em; font-variant-numeric: tabular-nums; font-family: ui-monospace, 'Courier New', monospace; } /* ================================================== */ /* Mode buttons (image-based) */ /* ================================================== */ .create-mode-row { display: flex; gap: clamp(6px, 1.5vw, 12px); justify-content: flex-end; flex-wrap: nowrap; width: 63%; max-width: 63%; } .create-mode-btn { flex: 1 1 0; aspect-ratio: 338 / 143; padding: 0; border: none; background: none; cursor: pointer; -webkit-tap-highlight-color: transparent; transition: transform 0.15s, filter 0.2s; } .create-mode-btn:hover { filter: brightness(1.15); } .create-mode-btn:active { transform: scale(0.96); } .create-mode-btn-img { display: block; width: 100%; height: 100%; aspect-ratio: 338 / 143; object-fit: contain; } /* ================================================== */ /* Private block */ /* ================================================== */ .create-private-block { display: flex; align-items: center; justify-content: flex-end; gap: clamp(8px, 1.2vw, 12px); margin: clamp(-2px, -0.3vh, 0px) 0 clamp(5px, 0.8vh, 9px) 0; width: 100%; } .create-view--hidden { display: none !important; } /* ================================================== */ /* Player number buttons (image-based) */ /* ================================================== */ .create-num-grid { display: flex; flex-wrap: nowrap; gap: clamp(4px, 1vw, 10px); justify-content: flex-end; margin-top: 0.1rem; width: 63%; max-width: 63%; } .create-num-btn { flex: 1 1 0; padding: 0; border: none; background: none; cursor: pointer; -webkit-tap-highlight-color: transparent; transition: transform 0.15s, filter 0.15s; } .create-num-btn:hover { filter: brightness(1.15); } .create-num-btn:active { transform: scale(0.92); } .create-num-btn-img { display: block; width: 100%; height: auto; object-fit: contain; } /* ================================================== */ /* Summary (image background) */ /* ================================================== */ .create-summary-wrap { position: relative; margin-bottom: clamp(6px, 1vh, 10px); width: 86%; max-width: 86%; } .create-summary { position: relative; width: 100%; padding: clamp(14px, 3.6vw, 24px) clamp(16px, 2.8vw, 28px); text-align: center; font-size: clamp(0.95rem, 1.9vw, 1.1rem); font-weight: 700; color: rgba(248, 250, 252, 0.95); background: url('IMAGE/textbox-player.png') center / 100% 100% no-repeat; text-shadow: 0 0 8px rgba(34, 211, 238, 0.25); border: none; } /* ================================================== */ /* Confirm button (image-based) */ /* ================================================== */ .create-confirm { display: block; width: 38%; max-width: 38%; margin: 0 auto; padding: 0; border: none; background: transparent; cursor: pointer; -webkit-tap-highlight-color: transparent; transition: transform 0.15s, filter 0.2s; } .create-confirm:hover { filter: brightness(1.2); } .create-confirm:active { transform: scale(0.97); } .create-confirm:disabled { opacity: 0.4; cursor: not-allowed; filter: saturate(0.3); } .create-confirm-img { display: block; width: 100%; height: auto; object-fit: contain; } /* ================================================== */ /* Status text */ /* ================================================== */ .create-status { margin: 0.5rem 0 0; min-height: 1.2em; text-align: center; font-size: clamp(0.82rem, 1.7vw, 0.95rem); color: #fb7185; font-weight: 500; } /* ================================================== */ /* Small mobile */ /* ================================================== */ @media (max-width: 480px) { .create-ui .menu-btn-back { top: max(clamp(0.25rem, 1.5vw, 1rem), env(safe-area-inset-top)); left: max(clamp(0.25rem, 1.5vw, 1rem), env(safe-area-inset-left)); } .create-ui .menu-btn-back-img { width: clamp(36px, 10vw, 50px); } } /* ================================================== */ /* Mobile Landscape */ /* ================================================== */ @media (max-width: 932px) and (orientation: landscape) { body { overflow: hidden; } .create-char-img { max-height: 95vh; opacity: 0.65; } .create-ui { height: 100vh; height: 100dvh; min-height: 0; overflow-y: auto; overflow-x: hidden; padding: max(4px, env(safe-area-inset-top)) max(8px, env(safe-area-inset-right)) max(4px, env(safe-area-inset-bottom)) max(8px, env(safe-area-inset-left)); -webkit-overflow-scrolling: touch; } .create-ui .menu-btn-back { position: absolute; top: max(0.3rem, env(safe-area-inset-top)); left: max(0.3rem, env(safe-area-inset-left)); } .create-ui .menu-btn-back-img { width: clamp(28px, 5vw, 42px); } .create-content { max-width: min(94vw, 720px); padding: clamp(20px, 4.5vh, 34px) 0 clamp(8px, 1.2vh, 12px); } .create-title-img { width: clamp(210px, 32vw, 340px); margin-bottom: clamp(0.25rem, 0.9vh, 0.65rem); } .create-panel { min-height: auto; padding: clamp(10px, 1.6vh, 14px) clamp(10px, 1.8vw, 16px) clamp(10px, 1.6vh, 14px); } .create-field--inline { gap: clamp(8px, 1.2vw, 12px); } .create-label-img { height: clamp(24px, 3vw, 34px); } .create-label-img--password { height: clamp(22px, 2.5vw, 30px); margin-bottom: 0.1rem; } .create-line { margin: clamp(3px, 0.8vh, 8px) 0; } .create-field { margin-bottom: clamp(4px, 0.8vh, 8px); } .create-input { padding: clamp(7px, 1.35vh, 11px) clamp(10px, 1.8vw, 14px); font-size: clamp(0.88rem, 1.55vw, 0.98rem); } .create-input--pin { padding: clamp(4px, 1vh, 8px) clamp(8px, 1.5vw, 14px); } .create-input-shell--pin { width: 30%; max-width: 30%; } .create-mode-btn-img { width: 100%; } .create-num-grid { gap: clamp(4px, 0.9vw, 8px); margin-top: 0.05rem; } .create-num-btn-img { width: 100%; } .create-private-block { gap: clamp(6px, 1vw, 10px); margin: clamp(-3px, -0.3vh, 0px) 0 clamp(5px, 0.8vh, 9px) 0; } .create-summary-wrap { margin-bottom: clamp(5px, 1vh, 10px); } .create-summary { padding: clamp(8px, 1.3vh, 12px) clamp(12px, 2vw, 18px); font-size: clamp(0.9rem, 1.75vw, 1.02rem); } .create-confirm { width: 38%; max-width: 38%; } .create-status { margin-top: 0.3rem; font-size: clamp(0.7rem, 1.3vw, 0.82rem); } } @media (max-height: 620px) and (orientation: landscape) { body { overflow: hidden; } .create-ui { height: 100vh; height: 100dvh; min-height: 0; overflow-y: auto; overflow-x: hidden; padding: max(4px, env(safe-area-inset-top)) max(8px, env(safe-area-inset-right)) max(4px, env(safe-area-inset-bottom)) max(8px, env(safe-area-inset-left)); -webkit-overflow-scrolling: touch; } .create-content { max-width: min(94vw, 680px); padding: clamp(16px, 3.2vh, 24px) 0 clamp(6px, 1.1vh, 10px); } .create-title-img { width: clamp(220px, 33vw, 340px); margin-bottom: clamp(0.2rem, 0.6vh, 0.45rem); } .create-field--inline { gap: clamp(8px, 1.2vw, 12px); } .create-field--room .create-input-shell { width: 69%; max-width: 69%; } .create-mode-row, .create-num-grid { width: 63%; max-width: 63%; } .create-label-img { height: clamp(24px, 3.1vw, 34px); } .create-label-img--password { height: clamp(20px, 2.4vw, 28px); } .create-mode-btn-img { width: 100%; } .create-num-btn-img { width: 100%; } .create-input-shell--pin { width: 30%; max-width: 30%; } .create-confirm { width: 38%; max-width: 38%; } .create-summary { font-size: clamp(0.88rem, 1.55vw, 1rem); padding: clamp(8px, 1.25vh, 12px) clamp(12px, 1.8vw, 16px); } } /* ---- Landscape height <= 400px ---- */ @media (max-height: 400px) and (orientation: landscape) { .create-content { max-width: min(92vw, 720px); padding-top: clamp(20px, 4vh, 30px); } .create-title-img { width: clamp(175px, 27vw, 260px); margin-bottom: clamp(0.2rem, 0.8vh, 0.5rem); } .create-panel { padding: clamp(8px, 1.8vh, 12px) clamp(10px, 2vw, 16px) clamp(8px, 1.8vh, 12px); } .create-label-img { height: clamp(18px, 2.5vw, 24px); margin-bottom: 0; } .create-mode-btn-img { width: 100%; } .create-num-btn-img { width: 100%; } .create-summary { padding: clamp(7px, 1.15vh, 9px) clamp(10px, 1.5vw, 14px); font-size: clamp(0.84rem, 1.35vw, 0.94rem); } .create-confirm { max-width: 38%; width: 38%; } } /* ---- Landscape height <= 360px ---- */ @media (max-height: 360px) and (orientation: landscape) { .create-content { max-width: min(94vw, 680px); padding-top: clamp(20px, 4vh, 30px); } .create-title-img { width: clamp(150px, 23vw, 220px); } .create-panel { padding: clamp(4px, 1vh, 10px) clamp(8px, 1.5vw, 14px) clamp(6px, 1vh, 12px); } .create-num-btn-img { width: 100%; } .create-num-grid { gap: clamp(2px, 0.6vw, 6px); } .create-mode-btn-img { width: 100%; } .create-input-shell--pin { width: 30%; max-width: 30%; } .create-ui .menu-btn-back-img { width: clamp(22px, 4vw, 32px); } .create-confirm { max-width: 38%; width: 38%; } } @media (max-width: 700px) and (orientation: portrait) { .create-field--inline { justify-content: flex-start; flex-wrap: wrap; white-space: normal; } .create-private-block { justify-content: flex-start; flex-wrap: wrap; } } /* ================================================== */ /* Fullscreen no-scroll (height-first) */ /* ================================================== */ html, body { height: 100%; overflow: hidden; } body { min-height: 100dvh; max-height: 100dvh; } .create-ui { display: flex; justify-content: center; align-items: center; height: 100dvh; min-height: 100dvh; max-height: 100dvh; overflow: hidden !important; } .create-content { width: min(calc(95dvh * 1), 90vw); max-width: min(calc(95dvh * 1), 90vw); height: auto; min-height: 0; max-height: none; aspect-ratio: 1 / 1; /* width : height = 1.2 : 1 */ justify-content: flex-start; container-type: size; overflow: hidden; } .create-title-img { width: 50%; max-width: 50%; margin-top: 2cqh; margin-bottom: 0.4cqh; } .create-title-line { --line-height: 5cqh; height: var(--line-height); width: min(calc(var(--line-height) * 1018 / 6), 100%); max-width: none; aspect-ratio: 1018 / 6; object-fit: contain; margin: -2cqh auto -2cqh; } .create-panel { width: 100%; max-width: 100%; min-height: 0; padding: 1.6cqh 2.4cqw; } .create-field { margin-bottom: -2cqh; } .create-field--room .create-input-shell { height: 14cqh; /* กำหนดสูงเอง */ width: calc(14cqh * 659 / 140); /* คงสัดส่วนเดิม */ max-width: 96%; position: relative; overflow: hidden; } .create-field--room .create-input { position: absolute; inset: 18% 8% 18% 8%; width: auto; height: auto; margin: 0; padding: 0; font-size: 2.7cqh; line-height: 1.1; } .create-field--mode { margin-bottom: -3cqh; /* ใกล้ขึ้น/ห่างขึ้น ปรับค่านี้ */ } .create-mode-row { width: 82%; max-width: 82%; gap: 0; } .create-mode-btn + .create-mode-btn { margin-left: -0.4cqh; } .create-mode-btn { flex: 0 0 auto; height: 14cqh; /* match roomname-textfield height */ width: calc(14cqh * 338 / 143); /* keep mode button ratio */ } .create-num-grid { --num-btn-gap: 0.8cqh; /* ช่องว่างปกติ (ห้ามติดลบ) */ --num-btn-overlap: -5cqh; /* ซ้อนทับได้ ใส่ค่าติดลบ เช่น -1.2cqh */ gap: var(--num-btn-gap); width: 82%; max-width: 82%; } .create-num-btn { --num-btn-height: 13.1cqh; /* ปรับความสูงปุ่มเลข 1-6 ที่นี่ */ flex: 0 0 auto; height: var(--num-btn-height); width: calc(var(--num-btn-height) * 151 / 137); aspect-ratio: 151 / 137; } .create-num-btn + .create-num-btn { margin-left: var(--num-btn-overlap); } .create-num-btn-img { width: 100%; height: 100%; aspect-ratio: 151 / 137; object-fit: contain; } .create-input-shell--pin { --pin-field-height: 10.5cqh; /* ปรับความสูงช่องรหัสที่นี่ */ position: relative; overflow: hidden; height: var(--pin-field-height); width: calc(var(--pin-field-height) * 242 / 110); max-width: 38%; aspect-ratio: 242 / 110; background-size: 100% 100%; } .create-input-shell--pin .create-input--pin { position: absolute; inset: 18% 10% 18% 10%; width: auto; height: auto; margin: 0; padding: 0; font-family: 'NotoSansThai', 'Kanit', 'Sarabun', sans-serif; font-size: 2.5cqh; line-height: 1; letter-spacing: 0.16em; } .create-summary-wrap { --summary-field-height: 20cqh; /* ปรับความสูง textbox-player ที่นี่ */ width: calc(var(--summary-field-height) * 947 / 200); max-width: 100%; height: var(--summary-field-height); margin-bottom: -1cqh; } .create-confirm { --confirm-btn-height: 15cqh; /* ปรับความสูง btn-confirm ที่นี่ */ height: var(--confirm-btn-height); width: calc(var(--confirm-btn-height) * 404 / 141); max-width: 46%; aspect-ratio: 404 / 141; display: block; margin: 0 auto; } .create-confirm-img { width: 100%; height: 100%; aspect-ratio: 404 / 141; object-fit: contain; } .create-label-img { height: 4.8cqh; } .create-field--room .create-label-img { height: 10cqh; width: calc(10cqh * 202 / 109); max-width: 32%; aspect-ratio: 202 / 109; object-fit: contain; transform: translateX(3cqw); } .create-field--mode .create-label-img { height: 9.5cqh; /* ใช้ความสูงเดียวกัน */ width: calc(9.5cqh * 170 / 99); /* ใช้ความกว้างอ้างอิงเดียวกัน */ aspect-ratio: 170 / 99; object-fit: contain; object-position: right center; transform: translateX(12.5cqw); /* ชิดขวาในกล่อง */ } .create-field--players .create-label-img { --players-label-height: 9.5cqh; /* ปรับความสูง txt-players ที่นี่ */ --players-label-offset-x: 2cqw; /* ปรับตำแหน่งให้ตรงกับ txt-roomname */ height: var(--players-label-height); width: calc(var(--players-label-height) * 295 / 99); max-width: 44%; aspect-ratio: 295 / 99; object-fit: contain; object-position: right center; transform: translateX(var(--players-label-offset-x)); } .create-private-block { margin-bottom: -1cqh; /* เพิ่ม = ห่างขึ้น, ลด/ติดลบ = ชิดขึ้น */ } .create-field--players { margin-bottom: 0cqh; /* เพิ่ม = ห่างขึ้น, ลด/ติดลบ = ชิดขึ้น */ } .create-label-img--password { --password-label-height: 10cqh; /* ปรับความสูง txt-password ที่นี่ */ height: var(--password-label-height); width: calc(var(--password-label-height) * 224 / 110); max-width: 34%; aspect-ratio: 224 / 110; object-fit: contain; transform: translate(4cqw, 0.4cqh); } .create-input { font-family: 'NotoSansThai', 'Kanit', 'Sarabun', sans-serif; font-size: 2.8cqh; padding: 2.1cqh 3.8cqw; } .create-summary { --summary-font-size: 4cqh; /* ปรับขนาดฟอนต์ใน textbox-player ที่นี่ */ position: relative; inset: 0; width: 100%; height: 100%; margin: 0; font-size: var(--summary-font-size); padding: 0 3.2cqw; display: flex; align-items: center; justify-content: center; background-size: 100% 100%; aspect-ratio: 947 / 200; } .create-status { font-family: 'NotoSansThai', sans-serif; font-size: 2cqh; margin-top: 0.5cqh; }