:root { --space-1: 0.5rem; --space-2: 1rem; --space-3: 1.5rem; --radius-md: 0.75rem; --radius-lg: 1rem; --ease-ios: cubic-bezier(0.32, 0.72, 0, 1); --ease-spring: cubic-bezier(0.22, 1, 0.36, 1); --dur-fast: 0.18s; --dur-view: 0.36s; --dur-msg: 0.2s; font-family: -apple-system, BlinkMacSystemFont, "SF Pro Text", "SF Pro Display", Inter, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; } html[data-theme="light"], body[data-theme="light"], #app[data-theme="light"], [data-theme="light"] { --bg: #f2f2f7; --card: #ffffff; --elevated: #ffffff; --text: #1c1c1e; --muted: #8e8e93; --tertiary: #aeaeb2; --border: rgba(60, 60, 67, 0.18); --separator: rgba(60, 60, 67, 0.14); /* Marca neutra (graphite) — vermelho só em --danger / VPN fail / pagamento enviado */ --blue: #1c1c1e; --blue-ink: #1c1c1e; --blue-soft: rgba(60, 60, 67, 0.12); --bubble: #1c1c1e; --bubble-received: #e9e9eb; --bubble-text: #ffffff; --input: #ffffff; --search-bg: rgba(118, 118, 128, 0.12); --danger: #ff3b30; --overlay: rgba(0, 0, 0, 0.28); --sheet: #f2f2f7; --modal-bg: rgba(255, 255, 255, 0.94); --modal-divider: rgba(60, 60, 67, 0.18); --input-bg: #f2f2f7; --pin: #636366; --shadow-card: 0 0.4rem 1.15rem rgba(0, 0, 0, 0.06); --auth-mark-bg: linear-gradient(160deg, #ffffff 0%, #f2f2f7 100%); --loc-widget-bg: #ffffff; --loc-widget-mine: #1c1c1e; --loc-map-bg: #e5e5ea; --loc-foot-muted: rgba(60, 60, 67, 0.55); --action-sheet-bg: rgba(242, 242, 247, 0.94); --action-sheet-cancel-bg: rgba(255, 255, 255, 0.96); --action-sheet-separator: rgba(60, 60, 67, 0.29); --action-sheet-press: rgba(0, 0, 0, 0.08); --ios-secondary: #007aff; --row-press: rgba(0, 0, 0, 0.06); --blue-shadow: rgba(0, 0, 0, 0.18); /* VPN: neutro no fluxo; verde/vermelho só no resultado */ --vpn-accent: #8e8e93; --vpn-accent-soft: rgba(142, 142, 147, 0.16); --vpn-log: rgba(28, 28, 30, 0.72); --vpn-scan: rgba(118, 118, 128, 0.1); --vpn-ok: #34c759; --vpn-ok-soft: rgba(52, 199, 89, 0.18); --vpn-fail: #ff3b30; --vpn-fail-soft: rgba(255, 59, 48, 0.18); color-scheme: light; } html[data-theme="dark"], body[data-theme="dark"], #app[data-theme="dark"], [data-theme="dark"] { --bg: #111111; --card: #1c1c1e; --elevated: #2c2c2e; --text: #ffffff; --muted: #8e8e93; --tertiary: #636366; --border: rgba(84, 84, 88, 0.45); --separator: rgba(84, 84, 88, 0.35); /* Marca neutra (graphite) — vermelho só em --danger / VPN fail / pagamento enviado */ --blue: #3a3a3c; --blue-ink: #ebebf5; --blue-soft: rgba(142, 142, 147, 0.22); --bubble: #3a3a3c; --bubble-received: #2c2c2e; --bubble-text: #ffffff; --input: #2c2c2e; --search-bg: rgba(118, 118, 128, 0.24); --danger: #ff453a; --overlay: rgba(0, 0, 0, 0.42); --sheet: #1c1c1e; --modal-bg: #2c2c2e; --modal-divider: rgba(84, 84, 88, 0.35); --input-bg: #1c1c1e; --pin: #98989d; --shadow-card: 0 0.4rem 1.2rem rgba(0, 0, 0, 0.35); --auth-mark-bg: linear-gradient(160deg, #2c2c2e 0%, #1c1c1e 100%); --loc-widget-bg: #1c1c1e; --loc-widget-mine: #3a3a3c; --loc-map-bg: #2c2c2e; --loc-foot-muted: rgba(235, 235, 245, 0.55); --action-sheet-bg: rgba(37, 37, 40, 0.94); --action-sheet-cancel-bg: rgba(37, 37, 40, 0.96); --action-sheet-separator: rgba(84, 84, 88, 0.65); --action-sheet-press: rgba(120, 120, 128, 0.28); --ios-secondary: #0a84ff; --row-press: rgba(120, 120, 128, 0.16); --blue-shadow: rgba(0, 0, 0, 0.4); /* VPN: neutro no fluxo; verde/vermelho só no resultado */ --vpn-accent: #8e8e93; --vpn-accent-soft: rgba(142, 142, 147, 0.2); --vpn-log: rgba(235, 235, 245, 0.62); --vpn-scan: rgba(118, 118, 128, 0.12); --vpn-ok: #30d158; --vpn-ok-soft: rgba(48, 209, 88, 0.2); --vpn-fail: #ff453a; --vpn-fail-soft: rgba(255, 69, 58, 0.22); color-scheme: dark; } * { box-sizing: border-box; margin: 0; padding: 0; -webkit-tap-highlight-color: transparent !important; } *:focus, *:focus-visible, *:active { outline: none !important; outline-offset: 0 !important; } button::-moz-focus-inner, input::-moz-focus-inner { border: 0 !important; } html, body { width: 100%; height: 100%; background: transparent; color: var(--text); overflow: hidden; } body { display: block; user-select: none; background: var(--bg); } button, input { appearance: none; -webkit-appearance: none; font: inherit; border: none; background: none; color: inherit; } html.in-phone, body.in-phone { background: var(--bg); } #app { height: 100%; background: var(--bg); position: relative; overflow: hidden; } .hidden { display: none !important; } /* ── View transitions (iOS push / pop / fade) ── */ .view { position: absolute; inset: 0; display: flex; flex-direction: column; height: 100%; opacity: 0; visibility: hidden; pointer-events: none; z-index: 1; background: var(--bg); will-change: transform, opacity; } .view.active { opacity: 1; visibility: visible; pointer-events: auto; z-index: 3; } .view.view-push-in { animation: viewPushIn var(--dur-view) var(--ease-ios) both; z-index: 4; } .view.view-push-out { animation: viewPushOut var(--dur-view) var(--ease-ios) both; z-index: 2; pointer-events: none; } .view.view-pop-in { animation: viewPopIn var(--dur-view) var(--ease-ios) both; z-index: 4; } .view.view-pop-out { animation: viewPopOut var(--dur-view) var(--ease-ios) both; z-index: 2; pointer-events: none; } .view.view-fade-in { animation: viewFadeIn 0.28s var(--ease-spring) both; z-index: 4; } .view.view-fade-out { animation: viewFadeOut 0.22s var(--ease-ios) both; z-index: 2; pointer-events: none; } @keyframes viewPushIn { from { opacity: 0.35; transform: translate3d(28%, 0, 0); } to { opacity: 1; transform: translate3d(0, 0, 0); } } @keyframes viewPushOut { from { opacity: 1; transform: translate3d(0, 0, 0); } to { opacity: 0.55; transform: translate3d(-18%, 0, 0); } } @keyframes viewPopIn { from { opacity: 0.55; transform: translate3d(-18%, 0, 0); } to { opacity: 1; transform: translate3d(0, 0, 0); } } @keyframes viewPopOut { from { opacity: 1; transform: translate3d(0, 0, 0); } to { opacity: 0.2; transform: translate3d(28%, 0, 0); } } @keyframes viewFadeIn { from { opacity: 0; transform: scale(0.985) translate3d(0, 0.4rem, 0); } to { opacity: 1; transform: scale(1) translate3d(0, 0, 0); } } @keyframes viewFadeOut { from { opacity: 1; } to { opacity: 0; } } @keyframes fadeUp { from { opacity: 0; transform: translate3d(0, 0.7rem, 0); } to { opacity: 1; transform: translate3d(0, 0, 0); } } @keyframes scaleIn { from { opacity: 0; transform: scale(0.92); } to { opacity: 1; transform: scale(1); } } @keyframes msgInMine { from { opacity: 0; transform: translate3d(1.1rem, 0.55rem, 0) scale(0.94); } to { opacity: 1; transform: translate3d(0, 0, 0) scale(1); } } @keyframes msgInTheirs { from { opacity: 0; transform: translate3d(-1.1rem, 0.55rem, 0) scale(0.94); } to { opacity: 1; transform: translate3d(0, 0, 0) scale(1); } } @keyframes msgPop { from { opacity: 0; transform: translate3d(0, 0.65rem, 0) scale(0.9); } to { opacity: 1; transform: translate3d(0, 0, 0) scale(1); } } @keyframes rowIn { from { opacity: 0; transform: translate3d(0, 0.55rem, 0); } to { opacity: 1; transform: translate3d(0, 0, 0); } } @keyframes softPulse { 0%, 100% { transform: scale(1); } 50% { transform: scale(0.96); } } /* AUTH */ #viewAuth { justify-content: center; align-items: center; padding: var(--space-3) var(--space-2); } .auth-wrap { width: 100%; max-width: 20rem; display: flex; flex-direction: column; align-items: stretch; gap: var(--space-3); } .auth-brand { display: flex; flex-direction: column; align-items: center; text-align: center; gap: var(--space-1); animation: fadeUp 0.45s var(--ease-spring) both; } .auth-mark { width: 4rem; height: 4rem; border-radius: var(--radius-lg); background: var(--auth-mark-bg); border: 1px solid var(--border); box-shadow: var(--shadow-card); color: var(--blue-ink); display: grid; place-items: center; margin-bottom: var(--space-1); animation: scaleIn 0.5s var(--ease-spring) both; } .auth-mark svg { width: 2rem; height: 2rem; fill: currentColor; } .auth-wrap h1 { font-size: 2rem; font-weight: 700; letter-spacing: -0.03em; line-height: 1.1; } .auth-subtitle { color: var(--muted); font-size: 0.9375rem; font-weight: 400; } .auth-form { width: 100%; animation: fadeUp 0.48s 0.08s var(--ease-spring) both; } .field { display: flex; flex-direction: column; gap: 0.5rem; margin-bottom: var(--space-2); } .field span { font-size: 0.8125rem; font-weight: 600; color: var(--muted); letter-spacing: 0.01em; } .field input { background: var(--elevated); border: 1px solid transparent; border-radius: var(--radius-md); padding: 1rem; font-size: 1.0625rem; line-height: 1.35; font-weight: 400; color: var(--text); outline: none; text-align: left; transition: border-color var(--dur-fast) ease, background var(--dur-fast) ease; } .field input::placeholder { color: var(--tertiary); } .field input:focus { border-color: var(--blue); background: var(--card); } .btn-primary { width: 100%; margin-top: var(--space-1); background: var(--blue); color: #fff; border-radius: 999px; padding: 1rem; font-size: 1.0625rem; font-weight: 600; cursor: pointer; box-shadow: 0 0.35rem 1rem var(--blue-shadow); transition: transform 0.15s var(--ease-ios), opacity 0.15s ease, filter 0.15s ease; } .btn-primary:active { transform: scale(0.97); filter: brightness(1.08); } .auth-switch { margin-top: var(--space-2); text-align: center; color: var(--muted); font-size: 0.9375rem; } .link { color: var(--blue-ink); font-weight: 600; cursor: pointer; } .btn-primary.is-busy, .btn-primary:disabled { opacity: 0.65; pointer-events: none; } .error { color: var(--danger); font-size: 0.875rem; font-weight: 600; margin: 0.5rem 0; } /* VPN CONNECT */ .vpn-view { justify-content: center; align-items: center; padding: var(--space-3) var(--space-2); background: radial-gradient(120% 80% at 50% 0%, var(--vpn-scan), transparent 55%), var(--bg); } .vpn-wrap { width: 100%; max-width: 20rem; display: flex; flex-direction: column; align-items: center; text-align: center; gap: var(--space-2); } .vpn-orb { position: relative; width: 7.5rem; height: 7.5rem; display: grid; place-items: center; margin-bottom: var(--space-1); } .vpn-ring { position: absolute; inset: 0; border-radius: 999px; border: 1.5px solid var(--vpn-accent); opacity: 0.35; } .vpn-ring-a { animation: vpnPulse 2.1s var(--ease-ios) infinite; } .vpn-ring-b { inset: 0.7rem; opacity: 0.55; animation: vpnPulse 2.1s 0.45s var(--ease-ios) infinite; } .vpn-core { position: relative; z-index: 1; width: 3.75rem; height: 3.75rem; border-radius: 999px; background: var(--vpn-accent-soft); border: 1px solid color-mix(in srgb, var(--vpn-accent) 45%, transparent); color: var(--vpn-accent); display: grid; place-items: center; box-shadow: 0 0 1.5rem var(--vpn-accent-soft); animation: vpnCore 1.6s var(--ease-spring) infinite; } .vpn-core svg { width: 1.75rem; height: 1.75rem; fill: currentColor; } .vpn-title { font-size: 1.25rem; font-weight: 700; letter-spacing: -0.02em; } .vpn-status { min-height: 1.35rem; color: var(--muted); font-size: 0.9375rem; font-weight: 500; transition: opacity 0.18s ease; } .vpn-progress { width: 100%; height: 0.35rem; border-radius: 999px; background: var(--search-bg); overflow: hidden; } .vpn-progress-bar { height: 100%; width: 0%; border-radius: inherit; background: var(--vpn-accent); box-shadow: 0 0 0.75rem var(--vpn-accent-soft); transition: width 0.35s var(--ease-ios); } .vpn-log { width: 100%; min-height: 6.5rem; max-height: 7.5rem; overflow: hidden; list-style: none; text-align: left; padding: 0.75rem var(--space-2); border-radius: var(--radius-md); background: var(--card); border: 1px solid var(--border); box-shadow: var(--shadow-card); font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; font-size: 0.72rem; line-height: 1.45; color: var(--vpn-log); } .vpn-log-line { opacity: 0; transform: translate3d(0, 0.35rem, 0); animation: vpnLogIn 0.28s var(--ease-spring) forwards; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .vpn-log-line:last-child { color: var(--text); font-weight: 600; opacity: 0.92; } .vpn-view.vpn-done .vpn-core { animation: none; background: var(--vpn-ok); color: #fff; border-color: var(--vpn-ok); box-shadow: 0 0 1.75rem var(--vpn-ok-soft); } .vpn-view.vpn-done .vpn-ring { opacity: 0.15; animation: none; border-color: var(--vpn-ok); } .vpn-view.vpn-done .vpn-status { color: var(--vpn-ok); font-weight: 600; } .vpn-view.vpn-done .vpn-progress-bar { background: var(--vpn-ok); box-shadow: 0 0 0.75rem var(--vpn-ok-soft); } .vpn-view.vpn-done .vpn-log-line:last-child { color: var(--vpn-ok); } .vpn-view.vpn-fail .vpn-core { animation: none; background: var(--vpn-fail); color: #fff; border-color: var(--vpn-fail); box-shadow: 0 0 1.75rem var(--vpn-fail-soft); } .vpn-view.vpn-fail .vpn-ring { opacity: 0.15; animation: none; border-color: var(--vpn-fail); } .vpn-view.vpn-fail .vpn-status { color: var(--vpn-fail); font-weight: 700; } .vpn-view.vpn-fail .vpn-progress-bar { background: var(--vpn-fail); box-shadow: 0 0 0.75rem var(--vpn-fail-soft); } .vpn-log-line.is-error { color: var(--vpn-fail); font-weight: 700; } @keyframes vpnPulse { 0% { transform: scale(0.86); opacity: 0.55; } 70% { transform: scale(1.08); opacity: 0; } 100% { transform: scale(1.08); opacity: 0; } } @keyframes vpnCore { 0%, 100% { transform: scale(1); } 50% { transform: scale(0.94); } } @keyframes vpnLogIn { to { opacity: 1; transform: translate3d(0, 0, 0); } } /* HOME */ .topbar { display: flex; flex-direction: column; gap: 0.85rem; padding: 3.55rem var(--space-2) 0; } .topbar-row { display: flex; align-items: center; justify-content: space-between; gap: 0.75rem; min-height: 3rem; } .identity-btn { display: flex; align-items: center; gap: 0.7rem; min-width: 0; max-width: calc(100% - 3.25rem); padding: 0.15rem 0.35rem 0.15rem 0.1rem; border: none; border-radius: 0.85rem; background: transparent; color: inherit; text-align: left; cursor: pointer; transition: background 0.15s ease, transform 0.15s var(--ease-ios); } .identity-btn:active { background: var(--row-press); transform: scale(0.985); } .identity-avatar { width: 2.55rem; height: 2.55rem; flex-shrink: 0; border-radius: 999px; display: grid; place-items: center; background: linear-gradient(145deg, #636366, var(--blue)); color: #fff; font-size: 1.05rem; font-weight: 700; letter-spacing: -0.03em; text-transform: uppercase; box-shadow: 0 0 0 0.5px color-mix(in srgb, var(--blue) 45%, transparent), 0 0.2rem 0.55rem var(--blue-shadow); } .identity-meta { min-width: 0; display: flex; flex-direction: column; gap: 0.08rem; } .identity-title { font-size: 1.45rem; font-weight: 750; letter-spacing: -0.035em; line-height: 1.1; color: var(--text); } .identity-handle { font-size: 0.82rem; font-weight: 500; letter-spacing: -0.01em; line-height: 1.15; color: var(--muted); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .identity-handle:empty::before { content: "Conta anônima"; opacity: 0.7; } .topbar-row > .icon-btn { flex-shrink: 0; width: 2.55rem; height: 2.55rem; background: var(--search-bg); color: var(--blue-ink); } .topbar-row > .icon-btn:active { background: var(--row-press); } .icon-btn { width: 2.5rem; height: 2.5rem; border-radius: 999px; color: var(--blue-ink); display: grid; place-items: center; cursor: pointer; transition: transform 0.15s var(--ease-ios), opacity 0.15s ease, background 0.15s ease; } .icon-btn:active { transform: scale(0.9); opacity: 0.75; } .icon-btn.is-disabled { opacity: 0.28; pointer-events: none; } .icon-btn svg { width: 1.375rem; height: 1.375rem; fill: currentColor; } .icon-btn svg path[fill="none"] { fill: none; stroke: currentColor; } .icon-btn.attach { background: var(--elevated); color: var(--text); } .icon-btn.attach svg path { stroke: currentColor; } .segment { display: grid; grid-template-columns: 1fr 1fr; background: var(--search-bg); border-radius: var(--radius-md); padding: 0.25rem; } .segment.mini { margin: 0 0 var(--space-2); } .seg { border-radius: 0.625rem; padding: 0.625rem 0.75rem; font-size: 0.9375rem; font-weight: 600; color: var(--muted); cursor: pointer; transition: background 0.18s var(--ease-ios), color 0.18s var(--ease-ios), transform 0.15s var(--ease-ios), box-shadow 0.18s var(--ease-ios); } .seg:active { transform: scale(0.97); } .seg.active { background: var(--elevated); color: var(--text); box-shadow: 0 0.15rem 0.45rem rgba(0, 0, 0, 0.28); } .search { display: flex; align-items: center; gap: 0.625rem; background: var(--search-bg); border-radius: var(--radius-md); padding: 0.75rem var(--space-2); } .search svg { width: 1.0625rem; height: 1.0625rem; fill: var(--muted); flex-shrink: 0; } .search input { flex: 1; font-size: 1rem; line-height: 1.3; outline: none; color: var(--text); font-weight: 400; } .search input::placeholder { color: var(--muted); } .list-scroll { flex: 1; overflow-y: auto; padding: var(--space-2) var(--space-2) var(--space-3); } .group-card { background: var(--card); border-radius: var(--radius-lg); overflow: hidden; box-shadow: var(--shadow-card); animation: fadeUp 0.32s var(--ease-spring) both; } .row-item { display: flex; align-items: center; gap: var(--space-2); padding: var(--space-2); cursor: pointer; position: relative; opacity: 0; animation: rowIn 0.36s var(--ease-spring) both; animation-delay: var(--stagger, 0s); transition: background 0.15s ease, transform 0.15s var(--ease-ios); } .row-item:active { background: var(--row-press); transform: scale(0.985); } .group-card.no-anim, .row-item.no-anim { animation: none !important; opacity: 1 !important; transform: none !important; } .row-item + .row-item::before { content: ""; position: absolute; left: 4.75rem; right: var(--space-2); top: 0; height: 1px; background: var(--separator); } .avatar { width: 3rem; height: 3rem; min-width: 3rem; border-radius: var(--radius-md); background: var(--blue-soft); color: var(--blue-ink); display: grid; place-items: center; font-weight: 700; font-size: 1rem; position: relative; } .avatar-group { background: linear-gradient(160deg, rgba(142, 142, 147, 0.32), rgba(142, 142, 147, 0.1)); } .avatar-icon { width: 1.5rem; height: 1.5rem; fill: currentColor; } .avatar .badge { position: absolute; bottom: -0.2rem; right: -0.2rem; background: var(--blue); color: #fff; font-size: 0.625rem; font-weight: 700; border-radius: 999px; padding: 0.125rem 0.38rem; min-width: 1.25rem; height: 1.05rem; line-height: 1; display: inline-flex; align-items: center; justify-content: center; white-space: nowrap; box-sizing: border-box; text-align: center; box-shadow: 0 0 0 2px var(--card); } .row-meta { flex: 1; min-width: 0; } .row-meta .name { font-size: 1.2rem; font-weight: 700; letter-spacing: -0.01em; line-height: 1.25; display: flex; align-items: center; gap: 0.35rem; } .row-meta .name .pin { font-size: 0.65rem; color: var(--pin); text-transform: uppercase; font-weight: 800; } .row-meta .preview { margin-top: 0.25rem; color: var(--muted); font-size: 0.9375rem; font-weight: 400; line-height: 1.3; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .preview-text { color: inherit; } .preview-chip { display: inline-flex; align-items: center; gap: 0.4rem; max-width: 100%; min-width: 0; vertical-align: middle; } .preview-chip-icon { flex-shrink: 0; width: 1.15rem; height: 1.15rem; border-radius: 0.3rem; display: grid; place-items: center; font-size: 0.52rem; font-weight: 800; letter-spacing: -0.02em; line-height: 1; } .preview-chip-icon svg { width: 0.72rem; height: 0.72rem; fill: currentColor; display: block; } .preview-chip-copy { display: inline-flex; align-items: baseline; gap: 0.35rem; min-width: 0; } .preview-chip-label { font-size: 0.82rem; font-weight: 600; letter-spacing: -0.01em; color: var(--muted); } .preview-chip-value { font-size: 0.82rem; font-weight: 700; letter-spacing: -0.01em; color: var(--text); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .preview-chip--pay .preview-chip-icon { background: rgba(48, 209, 88, 0.16); color: #30d158; } .preview-chip--pay .preview-chip-value { color: #30d158; } .preview-chip--loc .preview-chip-icon { background: rgba(142, 142, 147, 0.18); color: var(--blue-ink); } .preview-chip--img .preview-chip-icon { background: rgba(142, 142, 147, 0.18); color: var(--blue-ink); } .preview-chip--img .preview-chip-label { color: var(--muted); } .preview-chip.is-compact .preview-chip-copy { gap: 0.28rem; } .preview-chip.is-compact .preview-chip-label { font-size: 0.78rem; } .preview-chip.is-compact .preview-chip-value { font-size: 0.78rem; } .row-side { display: flex; flex-direction: column; align-items: flex-end; justify-content: center; gap: 0.5rem; flex-shrink: 0; } .row-time { color: var(--tertiary); font-size: 0.75rem; font-weight: 400; letter-spacing: 0.01em; } .chev, .chev-icon { width: 0.875rem; height: 0.875rem; fill: var(--tertiary); opacity: 0.7; } .empty { flex: 1; display: flex; align-items: center; justify-content: center; text-align: center; color: var(--tertiary); padding: var(--space-3) var(--space-2); font-size: 0.9375rem; font-weight: 400; line-height: 1.45; animation: fadeUp 0.4s var(--ease-spring) both; } .empty strong { display: block; color: var(--text); font-size: 1.125rem; font-weight: 600; margin-bottom: 0.5rem; } /* CHAT */ .chat-header { padding: 3.55rem 0.75rem 0.75rem; display: grid; grid-template-columns: 2.5rem 1fr auto; align-items: center; gap: 0.25rem; border-bottom: 1px solid var(--separator); background: var(--bg); } .chat-header .back svg { width: 1.5rem; height: 1.5rem; } .chat-header-actions { display: flex; align-items: center; justify-content: flex-end; gap: 0.1rem; min-width: 2.5rem; } .chat-header .leave svg { width: 1.35rem; height: 1.35rem; } .chat-header .mute { width: 2.6rem; height: 2.6rem; } .chat-header .mute svg { width: 1.55rem; height: 1.55rem; fill: currentColor; } .chat-header .mute svg path[fill="none"] { fill: none; stroke: currentColor; } .chat-header .mute.is-muted { color: var(--blue-ink); background: var(--blue-soft); } .row-unread-dot { width: 0.55rem; height: 0.55rem; border-radius: 50%; background: var(--blue); box-shadow: 0 0 0 2px var(--card); flex-shrink: 0; } .row-unread-badge { min-width: 1.45rem; height: 1.25rem; padding: 0 0.4rem; border-radius: 999px; background: var(--blue); color: #fff; font-size: 0.68rem; font-weight: 700; letter-spacing: -0.02em; line-height: 1; display: inline-flex; align-items: center; justify-content: center; white-space: nowrap; box-sizing: border-box; flex-shrink: 0; box-shadow: 0 0 0 2px var(--card); } .row-mute-mark { width: 1.05rem; height: 1.05rem; fill: var(--tertiary); opacity: 0.9; flex-shrink: 0; } .row-mute-mark path[fill="none"] { fill: none; stroke: currentColor; } .row-item.has-unread .row-time { color: var(--blue-ink); font-weight: 600; } .chat-title { text-align: center; min-width: 0; } .chat-title strong { display: block; font-size: 1.2rem; font-weight: 650; letter-spacing: -0.01em; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .chat-title span { font-size: 0.75rem; color: var(--muted); font-weight: 400; } .messages { flex: 1; overflow-y: auto; padding: var(--space-2) var(--space-2) var(--space-1); display: flex; flex-direction: column; gap: 0.18rem; } .msg.cluster-start { margin-top: 0.55rem; } .msg.cluster-start:first-child { margin-top: 0; } .msg-body { display: flex; align-items: center; gap: 0.3rem; max-width: 100%; width: max-content; position: relative; z-index: 1; } .msg.mine .msg-body { flex-direction: row-reverse; } .msg.theirs .msg-body { flex-direction: row; } .msg-reply-btn { flex-shrink: 0; align-self: center; width: 1.85rem; height: 1.85rem; border: none; border-radius: 999px; background: var(--elevated); color: var(--muted); display: grid; place-items: center; cursor: pointer; opacity: 0; transform: scale(0.88) translateY(0); pointer-events: none; position: relative; z-index: 3; touch-action: manipulation; -webkit-tap-highlight-color: transparent; box-shadow: 0 0.1rem 0.35rem rgba(0, 0, 0, 0.18); transition: opacity 0.18s var(--ease-ios), transform 0.22s var(--ease-spring), color 0.15s ease, background 0.15s ease; } .msg-reply-btn svg { width: 0.95rem; height: 0.95rem; fill: currentColor; pointer-events: none; } .msg:hover .msg-reply-btn, .msg:focus-within .msg-reply-btn, .msg.is-reply-armed .msg-reply-btn { opacity: 1; transform: scale(1) translateY(0); pointer-events: auto; } .msg-reply-btn:hover { color: var(--blue-ink); background: var(--blue-soft); opacity: 1; } .msg-reply-btn:active { transform: scale(0.9); opacity: 1; } /* Após clicar em responder: some de novo e limpa cor de hover/foco */ .msg.reply-just-clicked .msg-reply-btn, .msg.reply-just-clicked:hover .msg-reply-btn, .msg.reply-just-clicked:focus-within .msg-reply-btn, .msg.reply-just-clicked .msg-reply-btn:hover { color: var(--muted) !important; background: var(--elevated) !important; opacity: 0 !important; pointer-events: none; transform: scale(0.88) translateY(0); } .msg { max-width: 85%; width: max-content; min-width: 0; display: flex; flex-direction: column; gap: 0.25rem; } .msg.msg-enter.mine { animation: msgInMine var(--dur-msg) var(--ease-spring) both; animation-delay: var(--stagger, 0s); } .msg.msg-enter.theirs { animation: msgInTheirs var(--dur-msg) var(--ease-spring) both; animation-delay: var(--stagger, 0s); } .msg.msg-enter-pop { animation: msgPop 0.2s var(--ease-spring) both; } .msg.msg-flash { animation: none; } .msg.msg-flash .bubble:not(.bubble-loc), .msg.msg-flash .pay-widget, .msg.msg-flash .loc-widget { animation: msgFlashPulse 0.95s var(--ease-ios) both; } @keyframes msgFlashPulse { 0%, 100% { background-color: var(--bubble-received); } 35% { background-color: #3f3f42; } } .msg.mine.msg-flash .bubble { animation-name: msgFlashPulseMine; } @keyframes msgFlashPulseMine { 0%, 100% { background-color: var(--bubble); } 35% { background-color: #4a4a4c; } } .msg.msg-flash .pay-widget { animation-name: msgFlashPulsePay; } @keyframes msgFlashPulsePay { 0%, 100% { background-color: var(--elevated); } 35% { background-color: #353538; } } .msg.msg-flash .loc-widget { animation-name: msgFlashPulseLoc; } .msg.mine.msg-flash .loc-widget { animation-name: msgFlashPulseLocMine; } @keyframes msgFlashPulseLoc { 0%, 100% { background-color: var(--loc-widget-bg); } 35% { background-color: #2a2a2c; } } @keyframes msgFlashPulseLocMine { 0%, 100% { background-color: var(--loc-widget-mine); } 35% { background-color: #48484a; } } #app[data-theme="light"] .msg.msg-flash .bubble, [data-theme="light"] .msg.msg-flash .bubble { animation-name: msgFlashPulseLight; } #app[data-theme="light"] .msg.mine.msg-flash .bubble, [data-theme="light"] .msg.mine.msg-flash .bubble { animation-name: msgFlashPulseMineLight; } #app[data-theme="light"] .msg.msg-flash .pay-widget, [data-theme="light"] .msg.msg-flash .pay-widget { animation-name: msgFlashPulsePayLight; } #app[data-theme="light"] .msg.msg-flash .loc-widget, [data-theme="light"] .msg.msg-flash .loc-widget { animation-name: msgFlashPulseLocLight; } #app[data-theme="light"] .msg.mine.msg-flash .loc-widget, [data-theme="light"] .msg.mine.msg-flash .loc-widget { animation-name: msgFlashPulseLocMineLight; } @keyframes msgFlashPulseLight { 0%, 100% { background-color: var(--bubble-received); } 35% { background-color: #dcdce0; } } @keyframes msgFlashPulseMineLight { 0%, 100% { background-color: var(--bubble); } 35% { background-color: #2c2c2e; } } @keyframes msgFlashPulsePayLight { 0%, 100% { background-color: var(--elevated); } 35% { background-color: #ebebf0; } } @keyframes msgFlashPulseLocLight { 0%, 100% { background-color: var(--loc-widget-bg); } 35% { background-color: #ebebf0; } } @keyframes msgFlashPulseLocMineLight { 0%, 100% { background-color: var(--loc-widget-mine); } 35% { background-color: #2c2c2e; } } .msg.mine { align-self: flex-end; align-items: flex-end; } .msg.theirs { align-self: flex-start; align-items: flex-start; } .msg .sender { font-size: 0.95rem; font-weight: 650; color: var(--blue-ink); padding: 0 0.35rem; cursor: pointer; } .msg .sender.hidden, .msg .time.hidden { display: none !important; } .msg .bubble { background: var(--bubble-received); color: var(--text); padding: 0.625rem 0.875rem; border-radius: 1.125rem; font-size: 1rem; line-height: 1.35; font-weight: 400; word-break: break-word; box-sizing: border-box; width: max-content; max-width: 100%; box-shadow: 0 0.15rem 0.45rem rgba(0, 0, 0, 0.18); transition: transform 0.15s var(--ease-ios); } .msg .reply-quote { display: flex; gap: 0.45rem; margin: -0.15rem -0.2rem 0.45rem; padding: 0.35rem 0.5rem; border-radius: 0.55rem; background: rgba(0, 0, 0, 0.12); cursor: pointer; width: 100%; min-width: 9.5rem; box-sizing: border-box; } .msg.mine .reply-quote { background: rgba(0, 0, 0, 0.18); } .msg .reply-quote-bar { width: 0.18rem; border-radius: 999px; background: var(--blue); flex-shrink: 0; align-self: stretch; } .msg.mine .reply-quote-bar { background: rgba(255, 255, 255, 0.75); } .msg .reply-quote-meta { min-width: 0; flex: 1; display: flex; flex-direction: column; gap: 0.05rem; } .msg .reply-quote-user { font-size: 0.78rem; font-weight: 700; color: var(--blue-ink); letter-spacing: -0.01em; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .msg.mine .reply-quote-user { color: rgba(255, 255, 255, 0.92); } .msg .reply-quote-text { font-size: 0.8rem; line-height: 1.25; opacity: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; display: block; min-width: 0; } .msg .reply-quote-text .preview-chip-label { color: var(--muted); opacity: 0.95; } .msg.mine .reply-quote-text .preview-chip-label { color: rgba(255, 255, 255, 0.72); } .msg.mine .reply-quote-text .preview-chip-value { color: rgba(255, 255, 255, 0.95); } .msg.mine .reply-quote-text .preview-chip--pay .preview-chip-value { color: #30d158; } .msg.mine .reply-quote-text .preview-chip--pay .preview-chip-icon { background: rgba(48, 209, 88, 0.22); color: #30d158; } .msg.mine .reply-quote-text .preview-chip--loc .preview-chip-icon { background: rgba(255, 255, 255, 0.14); color: #fff; } .msg.mine .reply-quote-text .preview-chip--img .preview-chip-icon { background: rgba(255, 255, 255, 0.14); color: #fff; } .msg.is-payment .reply-quote { margin: 0 0 0.55rem; background: rgba(255, 255, 255, 0.04); border: 1px solid rgba(255, 255, 255, 0.08); } .msg.is-payment.mine .reply-quote-user { color: var(--text); } .msg.is-payment.mine .reply-quote-bar { background: var(--blue-ink); } .msg.is-payment .reply-quote-text .preview-chip-label { color: var(--muted); } .msg.is-payment .reply-quote-text .preview-chip-value { color: var(--text); } .msg .bubble:active { transform: scale(0.98); } .msg.mine .bubble { background: var(--bubble); color: var(--bubble-text); border-bottom-right-radius: 1.125rem; } .msg.theirs .bubble { border-bottom-left-radius: 1.125rem; color: var(--text); } .msg.mine.cluster-end .bubble { border-bottom-right-radius: 0.25rem; } .msg.theirs.cluster-end .bubble { border-bottom-left-radius: 0.25rem; } .msg.mine.cluster-continued .bubble { border-top-right-radius: 0.4rem; } .msg.theirs.cluster-continued .bubble { border-top-left-radius: 0.4rem; } .msg .time { font-size: 0.75rem; color: var(--tertiary); font-weight: 400; padding: 0 0.25rem; margin-top: 0.05rem; } .msg .bubble img { display: block; max-width: 12rem; border-radius: 0.75rem; } .msg .loc-btn { display: flex; align-items: center; gap: 0.7rem; font-weight: 600; } .msg .bubble.bubble-loc { padding: 0.35rem; overflow: hidden; max-width: 15.5rem; } .msg .loc-widget { display: flex; flex-direction: row; align-items: center; gap: 0.7rem; width: 100%; border: 0; padding: 0.55rem 0.65rem; border-radius: var(--radius-lg); overflow: hidden; background: transparent; color: inherit; text-align: left; cursor: pointer; box-shadow: none; } .msg.mine .loc-widget { background: transparent; color: inherit; } .msg .loc-icon { flex-shrink: 0; width: 2.35rem; height: 2.35rem; border-radius: 50%; display: grid; place-items: center; background: rgba(152, 152, 157, 0.22); color: #98989d; } .msg .loc-icon svg { width: 1.15rem; height: 1.15rem; fill: currentColor; } .msg .loc-copy { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 0.1rem; } .msg .loc-title { font-size: 0.92rem; font-weight: 650; } .msg .loc-hint { font-size: 0.72rem; opacity: 0.72; font-weight: 500; } .msg .loc-map, .msg .loc-map .leaflet-container, .msg .loc-pin, .msg .loc-widget-foot { display: none !important; } .msg.is-payment { max-width: 88%; } .pay-widget { width: 15.25rem; border-radius: 1rem; padding: 0.85rem 0.9rem 0.7rem; background: var(--elevated); border: 1px solid var(--border); box-shadow: var(--shadow-card); position: relative; overflow: hidden; } .pay-widget::before { content: ""; position: absolute; left: 0; top: 0; bottom: 0; width: 0.18rem; background: var(--tertiary); } .pay-widget.received::before { background: #30d158; } .pay-widget.sent::before { background: #ff453a; } .pay-widget-head { display: flex; align-items: center; justify-content: space-between; gap: 0.5rem; margin-bottom: 0.7rem; padding-left: 0.25rem; } .pay-widget-badge { display: inline-flex; align-items: center; padding: 0.18rem 0.45rem; border-radius: 999px; font-size: 0.62rem; font-weight: 700; letter-spacing: 0.04em; text-transform: uppercase; line-height: 1.2; background: rgba(142, 142, 147, 0.16); color: var(--muted); } .pay-widget.received .pay-widget-badge { background: rgba(48, 209, 88, 0.16); color: #30d158; } .pay-widget.sent .pay-widget-badge { background: rgba(255, 69, 58, 0.14); color: #ff453a; } .pay-widget-brand { font-size: 0.68rem; font-weight: 600; letter-spacing: -0.01em; color: var(--tertiary); } .pay-widget-amount { display: flex; align-items: baseline; gap: 0.35rem; padding-left: 0.25rem; margin-bottom: 0.75rem; line-height: 1; } .pay-widget-currency { font-size: 0.95rem; font-weight: 700; letter-spacing: -0.02em; color: var(--muted); } .pay-widget-value { font-size: 1.7rem; font-weight: 750; letter-spacing: -0.04em; color: var(--text); font-variant-numeric: tabular-nums; } .pay-widget.received .pay-widget-value { color: #30d158; } .pay-widget-foot { display: flex; justify-content: space-between; align-items: center; gap: 0.5rem; padding: 0.55rem 0.25rem 0.05rem; margin-top: 0.15rem; border-top: 0.5px solid var(--separator); font-size: 0.68rem; font-weight: 500; color: var(--tertiary); } .composer-wrap { display: flex; flex-direction: column; border-top: 1px solid var(--separator); background: var(--bg); position: relative; } .chat-toast { position: absolute; left: 50%; bottom: calc(100% + 0.55rem); transform: translateX(-50%) translateY(0.35rem); max-width: calc(100% - 1.5rem); padding: 0.45rem 0.75rem; border-radius: 999px; background: rgba(28, 28, 30, 0.92); color: #f5f5f7; font-size: 0.72rem; font-weight: 600; letter-spacing: -0.01em; line-height: 1.2; text-align: center; opacity: 0; pointer-events: none; z-index: 6; transition: opacity 0.18s var(--ease-ios), transform 0.18s var(--ease-ios); box-shadow: 0 0.35rem 1rem rgba(0, 0, 0, 0.28); } .chat-toast.is-visible { opacity: 1; transform: translateX(-50%) translateY(0); } html[data-theme="light"] .chat-toast, body[data-theme="light"] .chat-toast, #app[data-theme="light"] .chat-toast { background: rgba(60, 60, 67, 0.92); color: #fff; } .reply-bar { display: flex; align-items: stretch; gap: 0.55rem; padding: 0.55rem var(--space-2) 0.15rem; animation: replyBarIn 0.22s var(--ease-spring) both; } .reply-bar.hidden { display: none !important; } .reply-bar-accent { width: 0.2rem; border-radius: 999px; background: var(--blue); flex-shrink: 0; } .reply-bar-body { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 0.1rem; padding: 0.15rem 0; } .reply-bar-user { font-size: 0.82rem; font-weight: 700; color: var(--blue-ink); letter-spacing: -0.01em; } .reply-bar-preview { font-size: 0.82rem; color: var(--muted); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; min-width: 0; } .reply-bar-preview .preview-chip { max-width: 100%; } .reply-bar-close { width: 1.85rem; height: 1.85rem; align-self: center; border: none; border-radius: 999px; background: transparent; color: var(--muted); display: grid; place-items: center; cursor: pointer; flex-shrink: 0; } .reply-bar-close svg { width: 0.85rem; height: 0.85rem; fill: currentColor; } .reply-bar-close:active { transform: scale(0.92); color: var(--text); } @keyframes replyBarIn { from { opacity: 0; transform: translateY(0.4rem); } to { opacity: 1; transform: translateY(0); } } .composer { display: flex; align-items: center; gap: 0.625rem; padding: 0.75rem var(--space-2) calc(var(--space-2) + 1.1rem); background: transparent; } .composer input { flex: 1; background: var(--elevated); border-radius: 999px; padding: 0.875rem var(--space-2); font-size: 1rem; line-height: 1.3; outline: none; font-weight: 400; } .composer input::placeholder { color: var(--muted); } .send-btn { width: 2.5rem; height: 2.5rem; border-radius: 999px; background: var(--blue); color: #fff; display: grid; place-items: center; cursor: pointer; flex-shrink: 0; box-shadow: 0 0.25rem 0.75rem var(--blue-shadow); transition: transform 0.15s var(--ease-ios), filter 0.15s ease; } .send-btn svg { width: 1.125rem; height: 1.125rem; fill: currentColor; margin-left: 0.1rem; } .send-btn:active { transform: scale(0.92); filter: brightness(1.08); } /* MODALS — iOS alert / sheet */ .modal { position: fixed; inset: 0; z-index: 30; display: flex; align-items: center; justify-content: center; padding: var(--space-3); pointer-events: none; visibility: hidden; /* Espera o fade/slide do sheet+backdrop antes de sumir (senão o blur some no frame) */ transition: visibility 0s linear 0.34s; } .modal.is-open { pointer-events: auto; visibility: visible; transition: visibility 0s linear 0s; } .modal-backdrop { position: absolute; inset: 0; background: var(--overlay); -webkit-backdrop-filter: blur(6px); backdrop-filter: blur(6px); opacity: 0; transition: opacity 0.28s var(--ease-ios), -webkit-backdrop-filter 0.28s var(--ease-ios), backdrop-filter 0.28s var(--ease-ios); } .modal.is-open .modal-backdrop { opacity: 1; } .modal-card { position: relative; width: 100%; max-width: 20rem; overflow: hidden; background: var(--modal-bg); -webkit-backdrop-filter: blur(16px) saturate(140%); backdrop-filter: blur(16px) saturate(140%); border-radius: var(--radius-lg); padding: 0; margin: 0; color: var(--text); opacity: 0; transform: scale(0.92) translateY(0.5rem); transition: opacity 0.22s var(--ease-ios), transform 0.22s var(--ease-ios); box-shadow: var(--shadow-card); } .modal.is-open .modal-card { opacity: 1; transform: scale(1) translateY(0); } .modal-body { padding: var(--space-3) var(--space-2) var(--space-2); display: flex; flex-direction: column; align-items: stretch; gap: var(--space-2); } .modal-title { display: block; font-size: 1.125rem; font-weight: 700; letter-spacing: -0.02em; line-height: 1.25; text-align: center; color: var(--text); margin-bottom: 0; } .modal-field { display: flex; flex-direction: column; gap: 0.5rem; } .modal-field span { font-size: 0.8125rem; font-weight: 600; color: var(--muted); letter-spacing: 0.01em; } .modal-field input { width: 100%; border: 1px solid transparent; border-radius: var(--radius-md); padding: 0.875rem var(--space-2); font: inherit; font-size: 1.0625rem; line-height: 1.35; color: var(--text); background: var(--input-bg); outline: none; box-shadow: none; transition: border-color var(--dur-fast) ease; } .modal-field input::placeholder { color: var(--tertiary); } .modal-field input:focus, .modal-field input:focus-visible { border-color: var(--blue); box-shadow: none; outline: none; } .modal-card .error { margin: 0; font-size: 0.8125rem; text-align: center; color: var(--danger); } .modal-footer { display: grid; grid-template-columns: 1fr 1fr; border-top: 0.5px solid var(--modal-divider); min-height: 2.75rem; } .modal-footer-actions { display: flex; flex-direction: column; gap: 0.5rem; border-top: none; padding: 0 var(--space-2) var(--space-2); min-height: 0; } .modal-btn { border: none; background: transparent; color: var(--blue-ink); font-size: 1.0625rem; line-height: 1.2; padding: 0.75rem 0.5rem; cursor: pointer; transition: background 0.12s ease, opacity 0.12s ease, transform 0.12s var(--ease-ios); } .modal-btn:active { opacity: 0.72; } .modal-footer-actions .modal-btn-send { width: 100%; border-radius: 999px; background: var(--blue); color: #fff; font-weight: 600; padding: 0.875rem var(--space-2); box-shadow: 0 0.3rem 0.9rem var(--blue-shadow); } .modal-footer-actions .modal-btn-send:active { transform: scale(0.98); background: var(--blue); opacity: 1; filter: brightness(1.08); } .modal-footer-actions .modal-btn-cancel { width: 100%; font-weight: 600; padding: 0.625rem; background: transparent; } .modal-btn-cancel { font-weight: 600; border-right: 0.5px solid var(--modal-divider); } .modal-footer-actions .modal-btn-cancel { border-right: none; } .modal-btn-send { font-weight: 700; } .pay-hint { color: var(--muted); font-size: 0.875rem; line-height: 1.4; text-align: center; margin: 0; } .pay-hint b { color: var(--text); font-weight: 600; } /* iOS UIActionSheet */ .modal-actions { align-items: flex-end; padding: 0.55rem 0.7rem calc(1.35rem + env(safe-area-inset-bottom, 0px)); } .modal-actions .modal-backdrop { background: rgba(0, 0, 0, 0.36); } .modal-actions.is-open .action-sheet { opacity: 1; transform: translateY(0); } .action-sheet { position: relative; width: 100%; max-width: 26rem; margin: 0 auto; display: flex; flex-direction: column; gap: 0.5rem; opacity: 0; transform: translateY(110%); transition: opacity 0.26s var(--ease-ios), transform 0.34s var(--ease-ios); } .action-sheet-group { overflow: hidden; border-radius: 0.875rem; background: var(--action-sheet-bg); -webkit-backdrop-filter: blur(28px) saturate(180%); backdrop-filter: blur(28px) saturate(180%); box-shadow: 0 0 0 0.5px var(--border); } .action-sheet-btn { position: relative; display: flex; align-items: center; justify-content: space-between; gap: 0.75rem; width: 100%; min-height: 3.5rem; padding: 0.85rem 1.1rem; border: none; border-radius: 0; background: transparent; /* iOS: ação padrão = system blue; vermelho só em .is-danger */ color: var(--ios-secondary); font: inherit; font-size: 1.25rem; font-weight: 400; letter-spacing: -0.02em; line-height: 1.2; text-align: left; cursor: pointer; transition: background 0.12s ease; } .action-sheet-btn + .action-sheet-btn::before { content: ""; position: absolute; top: 0; left: 0; right: 0; height: 0.5px; background: var(--action-sheet-separator); pointer-events: none; } .action-sheet-btn:active { background: var(--action-sheet-press); } .action-sheet-btn.hidden { display: none !important; } .action-sheet-btn.is-danger { color: var(--danger); font-weight: 600; justify-content: center; } .action-sheet-icon { width: 1.35rem; height: 1.35rem; flex-shrink: 0; color: var(--ios-secondary); opacity: 0.95; } .action-sheet-cancel { width: 100%; min-height: 3.5rem; margin-bottom: 0.55rem; padding: 0.85rem 1.1rem; border: none; border-radius: 0.875rem; background: var(--action-sheet-cancel-bg); -webkit-backdrop-filter: blur(28px) saturate(180%); backdrop-filter: blur(28px) saturate(180%); box-shadow: 0 0 0 0.5px var(--border); color: var(--ios-secondary); font: inherit; font-size: 1.25rem; font-weight: 700; letter-spacing: -0.02em; cursor: pointer; transition: background 0.12s ease; } .action-sheet-cancel:active { background: var(--action-sheet-press); } ::-webkit-scrollbar { width: 0; height: 0; } @supports not (background: color-mix(in srgb, red 10%, blue)) { .avatar { background: rgba(142, 142, 147, 0.18); } .identity-avatar { background: linear-gradient(145deg, #636366, #3a3a3c); box-shadow: 0 0.2rem 0.55rem rgba(0, 0, 0, 0.35); } } @media (prefers-reduced-motion: reduce) { *, *::before, *::after { animation-duration: 0.01ms !important; animation-iteration-count: 1 !important; transition-duration: 0.01ms !important; } .view, .msg, .row-item, .group-card, .empty, .auth-brand, .auth-mark, .auth-form, .vpn-ring, .vpn-core, .vpn-log-line { opacity: 1 !important; transform: none !important; animation: none !important; } }