body { display: flex; justify-content: center; background: #05070A; min-height: 100vh; position: relative; overflow: hidden; } body::before { content: ''; position: fixed; top: 50%; left: 50%; width: 100vw; height: 100vh; background: radial-gradient(circle at center, rgba(88, 50, 168, 0.15) 0%, rgba(212, 175, 55, 0.1) 40%, transparent 70%); transform: translate(-50%, -50%); z-index: -1; filter: blur(100px); pointer-events: none; } .app-shell { width: min(100vw, 430px); height: 100vh; height: 100svh; position: fixed; top: 0; left: 50%; transform: translateX(-50%); --call-minimized-bar-height: 0px; --topbar-height: 0px; --composer-height: 0px; --toolbar-height: 78px; --keyboard-offset: 0px; background: transparent; border-left: 1px solid rgba(211, 170, 86, 0.2); border-right: 1px solid rgba(211, 170, 86, 0.2); box-shadow: var(--shadow); overflow: hidden; } .screen-content, .topbar-slot, .composer-slot, .toolbar-slot, .connection-retry-banner { z-index: 1; } .screen-content { position: absolute; top: calc(var(--call-minimized-bar-height, 0px) + var(--topbar-height, 0px)); left: 0; right: 0; bottom: calc(var(--toolbar-height, 78px) + var(--composer-height, 0px)); overflow-y: auto; padding: 14px 14px 24px; } .screen-content.no-app-chrome { top: var(--call-minimized-bar-height, 0px); bottom: 0; padding-bottom: calc(24px + env(safe-area-inset-bottom)); } .app-shell.has-minimized-call .screen-content { padding-top: 12px; } .screen-content.network-scroll-lock { overflow: hidden; padding: 0; } .topbar-slot[hidden], .composer-slot[hidden] { display: none; } .topbar-slot { position: absolute; top: var(--call-minimized-bar-height, 0px); left: 0; right: 0; padding: 0 12px; pointer-events: none; } .topbar-slot > * { pointer-events: auto; } .composer-slot { position: absolute; left: 0; right: 0; bottom: calc(var(--toolbar-height, 78px) + env(safe-area-inset-bottom)); padding: 0 12px 8px; pointer-events: none; } .composer-slot > * { pointer-events: auto; } .toolbar-slot { position: absolute; left: 0; right: 0; bottom: 0; padding: 2px 10px calc(4px + env(safe-area-inset-bottom)); background: linear-gradient(180deg, rgba(7, 12, 23, 0) 0%, rgba(6, 11, 22, 0.96) 44%); transition: opacity 0.18s ease, transform 0.18s ease; } body.chat-keyboard-open .screen-content { bottom: calc(var(--composer-height, 0px) + max(var(--toolbar-height, 78px), var(--keyboard-offset, 0px))); padding-bottom: calc(14px + env(safe-area-inset-bottom)); } body.chat-keyboard-open .composer-slot { bottom: max(var(--toolbar-height, 78px), var(--keyboard-offset, 0px)); padding-bottom: calc(8px + env(safe-area-inset-bottom)); } body.chat-keyboard-open .toolbar-slot { opacity: 1; pointer-events: auto; transform: none; } .connection-retry-banner { position: absolute; left: 12px; right: 12px; bottom: calc(96px + env(safe-area-inset-bottom)); z-index: 5; border-radius: 11px; border: 1px solid rgba(133, 156, 201, 0.3); background: rgba(10, 19, 37, 0.86); color: #c6d6f7; font-size: 12px; line-height: 1.2; text-align: center; padding: 7px 10px; pointer-events: auto; cursor: pointer; backdrop-filter: blur(10px); } .connection-retry-banner.is-connected { border-color: rgba(124, 235, 171, 0.4); color: #d8ffe9; } .connection-retry-banner.is-connecting { border-color: rgba(238, 196, 107, 0.42); color: #ffe8bb; } .connection-retry-banner.is-disconnected { border-color: rgba(228, 127, 145, 0.44); color: #ffdce3; } .connection-retry-banner.is-updating { border-color: rgba(144, 201, 255, 0.44); color: #d9eeff; } @media (min-width: 900px) { .app-shell { top: 16px; height: calc(100svh - 32px); border-radius: 24px; } }