diff --git a/neode-ui/src/views/federation/PresenceSignModal.vue b/neode-ui/src/views/federation/PresenceSignModal.vue index ad796b70..972e0287 100644 --- a/neode-ui/src/views/federation/PresenceSignModal.vue +++ b/neode-ui/src/views/federation/PresenceSignModal.vue @@ -15,10 +15,10 @@ role="dialog" aria-modal="true" aria-label="Sign and publish node presence" - class="relative z-10 w-full max-w-lg" + class="relative z-10 w-full max-w-lg flex flex-col min-h-0 max-h-full" > -
+
Nostr node discovery

-
+ +
@@ -103,7 +105,7 @@
-
+
@@ -116,7 +118,7 @@
-

+

NIP-01 · SECP256K1 · SCHNORR · Signed locally

@@ -160,6 +162,24 @@ function truncateNpub(npub: string): string { height: 148px; } +/* Small phones: shrink the hero so the signed-info card keeps most of the + viewport; the card itself scrolls internally when it still doesn't fit. */ +@media (max-width: 480px), (max-height: 740px) { + .presence-hero { + width: 96px; + height: 96px; + transform: scale(0.9); + } + .presence-viz-segment { + --seg-radius: -40px; + height: 10px; + } + .presence-glass-border { + width: 72px; + height: 72px; + } +} + .presence-viz-ring { position: absolute; inset: 0; @@ -179,27 +199,27 @@ function truncateNpub(npub: string): string { background: linear-gradient(to bottom, rgba(250, 250, 250, 0.4), rgba(250, 250, 250, 0.06)); border-radius: 1.5px; transform-origin: center center; - transform: rotate(var(--seg-deg)) translateY(-60px); + transform: rotate(var(--seg-deg)) translateY(var(--seg-radius, -60px)); animation: presence-seg-pulse 14s ease-in-out infinite; animation-delay: calc(var(--seg-i) * 0.02s); } @keyframes presence-seg-pulse { - 0% { opacity: 0.15; transform: rotate(var(--seg-deg)) translateY(-60px) scaleY(0.4); } - 7.1% { opacity: 0.7; transform: rotate(var(--seg-deg)) translateY(-60px) scaleY(1); } - 14.3% { opacity: 0.15; transform: rotate(var(--seg-deg)) translateY(-60px) scaleY(0.4); } - 21.4% { opacity: 0.7; transform: rotate(var(--seg-deg)) translateY(-60px) scaleY(1); } - 28.6% { opacity: 0.15; transform: rotate(var(--seg-deg)) translateY(-60px) scaleY(0.4); } - 35.7% { opacity: 0.7; transform: rotate(var(--seg-deg)) translateY(-60px) scaleY(1); } - 42.9% { opacity: 0.15; transform: rotate(var(--seg-deg)) translateY(-60px) scaleY(0.4); } - 50% { opacity: 0.7; transform: rotate(var(--seg-deg)) translateY(-60px) scaleY(1); } - 57.1% { opacity: 0.15; transform: rotate(var(--seg-deg)) translateY(-60px) scaleY(0.4); } - 64.3% { opacity: 0.7; transform: rotate(var(--seg-deg)) translateY(-60px) scaleY(1); } - 71.4% { opacity: 0.15; transform: rotate(var(--seg-deg)) translateY(-60px) scaleY(0.4); } - 78.6% { opacity: 1; transform: rotate(var(--seg-deg)) translateY(-60px) scaleY(1.5); } - 85.7% { opacity: 1; transform: rotate(var(--seg-deg)) translateY(-60px) scaleY(1.5); } - 92.9% { opacity: 0.15; transform: rotate(var(--seg-deg)) translateY(-60px) scaleY(0.4); } - 100% { opacity: 0.15; transform: rotate(var(--seg-deg)) translateY(-60px) scaleY(0.4); } + 0% { opacity: 0.15; transform: rotate(var(--seg-deg)) translateY(var(--seg-radius, -60px)) scaleY(0.4); } + 7.1% { opacity: 0.7; transform: rotate(var(--seg-deg)) translateY(var(--seg-radius, -60px)) scaleY(1); } + 14.3% { opacity: 0.15; transform: rotate(var(--seg-deg)) translateY(var(--seg-radius, -60px)) scaleY(0.4); } + 21.4% { opacity: 0.7; transform: rotate(var(--seg-deg)) translateY(var(--seg-radius, -60px)) scaleY(1); } + 28.6% { opacity: 0.15; transform: rotate(var(--seg-deg)) translateY(var(--seg-radius, -60px)) scaleY(0.4); } + 35.7% { opacity: 0.7; transform: rotate(var(--seg-deg)) translateY(var(--seg-radius, -60px)) scaleY(1); } + 42.9% { opacity: 0.15; transform: rotate(var(--seg-deg)) translateY(var(--seg-radius, -60px)) scaleY(0.4); } + 50% { opacity: 0.7; transform: rotate(var(--seg-deg)) translateY(var(--seg-radius, -60px)) scaleY(1); } + 57.1% { opacity: 0.15; transform: rotate(var(--seg-deg)) translateY(var(--seg-radius, -60px)) scaleY(0.4); } + 64.3% { opacity: 0.7; transform: rotate(var(--seg-deg)) translateY(var(--seg-radius, -60px)) scaleY(1); } + 71.4% { opacity: 0.15; transform: rotate(var(--seg-deg)) translateY(var(--seg-radius, -60px)) scaleY(0.4); } + 78.6% { opacity: 1; transform: rotate(var(--seg-deg)) translateY(var(--seg-radius, -60px)) scaleY(1.5); } + 85.7% { opacity: 1; transform: rotate(var(--seg-deg)) translateY(var(--seg-radius, -60px)) scaleY(1.5); } + 92.9% { opacity: 0.15; transform: rotate(var(--seg-deg)) translateY(var(--seg-radius, -60px)) scaleY(0.4); } + 100% { opacity: 0.15; transform: rotate(var(--seg-deg)) translateY(var(--seg-radius, -60px)) scaleY(0.4); } } .presence-glass-border {