| /* WeChat QR login dialog content. */ |
| |
| .settingsWechatQrCaption { |
| font: var(--maka-text-body); |
| margin: 0; |
| color: var(--muted-foreground); |
| } |
| |
| .settingsWechatQrBody { |
| display: grid; |
| place-items: center; |
| align-content: center; |
| gap: var(--space-3); |
| text-align: center; |
| /* Deep-review fix: the retired `.settingsWechatQrState` pane carried a |
| 180px floor; without one the dialog collapses in the generating/expired/ |
| error states and snaps taller when the QR (224px frame) arrives. */ |
| min-height: 224px; |
| } |
| |
| .settingsWechatQrFrame { |
| width: 224px; |
| height: 224px; |
| display: grid; |
| place-items: center; |
| border: var(--border-width-hairline) solid color-mix(in srgb, var(--brand-wechat) 20%, var(--border)); |
| border-radius: var(--radius-surface); |
| background: white; |
| padding: var(--space-3); |
| } |
| |
| .settingsWechatQrFrame img { |
| width: 100%; |
| height: 100%; |
| object-fit: contain; |
| image-rendering: pixelated; |
| } |
| |
| /* Astryx convergence (task #136): the `.settingsWechatQrState` placeholder |
| pane and its four hand-tinted `data-tone` variants are EmptyState / Spinner |
| now; only the QR frame plate and caption remain bespoke. */ |