From e50780e4b3fc25a75736d2fbf712df4d8c430ff6 Mon Sep 17 00:00:00 2001 From: thePR0M3TH3AN <53631862+PR0M3TH3AN@users.noreply.github.com> Date: Mon, 29 Sep 2025 15:10:53 -0400 Subject: [PATCH] Consolidate profile modal account styling --- components/profile-modal.html | 163 ++++++++++---------- css/style.css | 274 ++++++++++++++++++++++++++++++++++ 2 files changed, 349 insertions(+), 88 deletions(-) diff --git a/components/profile-modal.html b/components/profile-modal.html index 8d0055cd..b473123d 100644 --- a/components/profile-modal.html +++ b/components/profile-modal.html @@ -107,100 +107,87 @@ role="tabpanel" aria-labelledby="profileNavAccount" > -
-
-
-

Switch profiles

-

+ +

+
+
+

Switch profiles

+

Save multiple Nostr profiles so you can swap identities without leaving BitVid.

- - Preview + Preview +
+ +
+ + Active profile avatar + + + + Active profile + + + Loading... + npub1...
-
-
-
+ +
-
- -
-

+ + + + + + Add profile + Link another npub + + + +

Profiles you add here will stay on this device so you can quickly switch before posting or moderating.

diff --git a/css/style.css b/css/style.css index d36859e4..43d90bef 100644 --- a/css/style.css +++ b/css/style.css @@ -269,6 +269,280 @@ header img { -webkit-backdrop-filter: blur(0.625rem); /* For Safari */ } +/* -------------------------------------------------------------------------- + Profile modal account pane + -------------------------------------------------------------------------- + The modal previously mixed Tailwind-style utility classes with our global + stylesheet. Those utilities are not always present in the production build, + so important layout rules (borders, gaps, flex behaviour) were getting + dropped. This block consolidates the account tab styling in one predictable + place so future tweaks only require CSS updates here instead of scattered + inline class lists. +--------------------------------------------------------------------------- */ +#profileModal .profile-pane { + display: flex; + flex-direction: column; + gap: 1.5rem; +} + +#profileModal .profile-switcher { + display: flex; + flex-direction: column; + gap: 1.5rem; + padding: clamp(1.25rem, 2vw, 1.5rem); + border-radius: 1.25rem; + border: 0.0625rem solid rgba(148, 163, 184, 0.28); + background: linear-gradient(145deg, rgba(15, 23, 42, 0.94), rgba(15, 23, 42, 0.72)); + box-shadow: 0 1.75rem 3.5rem rgba(8, 11, 30, 0.45); +} + +#profileModal .profile-switcher__header { + display: flex; + flex-direction: column; + gap: 0.75rem; +} + +#profileModal .profile-switcher__intro { + display: flex; + flex-direction: column; + gap: 0.35rem; +} + +#profileModal .profile-switcher__title { + margin: 0; + font-size: 1rem; + font-weight: 600; + color: var(--color-text); +} + +#profileModal .profile-switcher__subtitle { + margin: 0; + font-size: 0.875rem; + color: var(--color-muted); +} + +#profileModal .profile-switcher__badge { + align-self: flex-start; + display: inline-flex; + align-items: center; + justify-content: center; + padding: 0.35rem 0.85rem; + font-size: 0.625rem; + font-weight: 600; + letter-spacing: 0.18em; + text-transform: uppercase; + border-radius: 9999px; + background: rgba(59, 130, 246, 0.18); + color: rgba(191, 219, 254, 0.95); + border: 0.0625rem solid rgba(96, 165, 250, 0.25); +} + +#profileModal .profile-card { + position: relative; + display: flex; + flex-direction: column; + gap: 0.85rem; + padding: 1rem; + border-radius: 1rem; + border: 0.0625rem solid rgba(148, 163, 184, 0.24); + background: rgba(15, 23, 42, 0.72); + box-shadow: inset 0 1px 0 rgba(148, 163, 184, 0.08); + color: var(--color-text); + cursor: pointer; + transition: border-color 0.2s ease, box-shadow 0.2s ease, background 0.2s ease; + outline: none; +} + +#profileModal .profile-card:hover { + border-color: rgba(148, 163, 184, 0.45); +} + +#profileModal .profile-card:focus-visible { + border-color: rgba(96, 165, 250, 0.6); + box-shadow: 0 0 0 0.1875rem rgba(37, 99, 235, 0.25); +} + +#profileModal .profile-card--active { + border-color: rgba(59, 130, 246, 0.55); + background: linear-gradient(160deg, rgba(37, 99, 235, 0.22), rgba(15, 23, 42, 0.78)); + box-shadow: 0 1.35rem 2.8rem rgba(37, 99, 235, 0.22); +} + +#profileModal .profile-card__avatar { + flex: 0 0 auto; + width: 3rem; + height: 3rem; + display: grid; + place-items: center; + border-radius: 9999px; + overflow: hidden; + border: 0.1875rem solid rgba(148, 163, 184, 0.3); + background: rgba(15, 23, 42, 0.95); +} + +#profileModal .profile-card__avatar img { + width: 100%; + height: 100%; + border-radius: inherit; + object-fit: cover; +} + +#profileModal .profile-card--active .profile-card__avatar { + border-color: rgba(96, 165, 250, 0.7); + box-shadow: 0 0 0 0.1875rem rgba(59, 130, 246, 0.18); +} + +#profileModal .profile-card__meta { + flex: 1; + min-width: 0; + display: flex; + flex-direction: column; + gap: 0.5rem; +} + +#profileModal .profile-card__topline { + display: flex; + flex-direction: column; + gap: 0.35rem; + align-items: flex-start; +} + +#profileModal .profile-card__label { + font-size: 0.7rem; + font-weight: 600; + letter-spacing: 0.2em; + text-transform: uppercase; + color: rgba(191, 219, 254, 0.9); +} + +#profileModal .profile-card__action { + display: inline-flex; + align-items: center; + justify-content: center; + padding: 0.3rem 0.8rem; + border-radius: 9999px; + border: 0.0625rem solid rgba(59, 130, 246, 0.4); + background: rgba(59, 130, 246, 0.14); + color: rgba(191, 219, 254, 0.95); + font-size: 0.65rem; + font-weight: 600; + letter-spacing: 0.18em; + text-transform: uppercase; + text-decoration: none; + transition: background 0.2s ease, border-color 0.2s ease, color 0.2s ease; +} + +#profileModal .profile-card__action:hover, +#profileModal .profile-card__action:focus-visible { + background: rgba(59, 130, 246, 0.24); + border-color: rgba(59, 130, 246, 0.6); + color: #ffffff; +} + +#profileModal .profile-card__name { + font-size: 0.95rem; + font-weight: 600; + color: var(--color-text); + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +#profileModal .profile-card__npub { + font-size: 0.75rem; + font-family: "JetBrains Mono", "Fira Code", ui-monospace, SFMono-Regular, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; + color: rgba(148, 163, 184, 0.85); + word-break: break-all; +} + +#profileModal .profile-switcher__list { + display: flex; + flex-direction: column; + gap: 1rem; +} + +#profileModal .profile-switcher__add { + display: flex; + align-items: center; + gap: 1rem; + padding: 1rem; + border-radius: 1rem; + border: 0.125rem dashed rgba(148, 163, 184, 0.35); + background: rgba(15, 23, 42, 0.55); + color: rgba(226, 232, 240, 0.85); + text-align: left; + cursor: pointer; + transition: border-color 0.2s ease, background 0.2s ease, color 0.2s ease; +} + +#profileModal .profile-switcher__add:hover, +#profileModal .profile-switcher__add:focus-visible { + border-color: rgba(96, 165, 250, 0.65); + background: rgba(59, 130, 246, 0.18); + color: #ffffff; + outline: none; +} + +#profileModal .profile-switcher__addAvatar { + flex: 0 0 auto; + width: 3rem; + height: 3rem; + display: grid; + place-items: center; + border-radius: 9999px; + border: 0.125rem dashed currentColor; + color: inherit; + background: rgba(15, 23, 42, 0.75); +} + +#profileModal .profile-switcher__addAvatar svg { + width: 1.25rem; + height: 1.25rem; +} + +#profileModal .profile-switcher__addCopy { + display: flex; + flex-direction: column; + gap: 0.25rem; +} + +#profileModal .profile-switcher__addTitle { + font-size: 0.9rem; + font-weight: 600; + color: inherit; +} + +#profileModal .profile-switcher__addHint { + font-size: 0.75rem; + color: rgba(148, 163, 184, 0.85); +} + +#profileModal .profile-switcher__helper { + margin: 0; + font-size: 0.75rem; + color: rgba(148, 163, 184, 0.7); +} + +@media (min-width: 640px) { + #profileModal .profile-switcher__header { + flex-direction: row; + align-items: center; + justify-content: space-between; + } + + #profileModal .profile-card { + flex-direction: row; + align-items: center; + } + + #profileModal .profile-card__topline { + flex-direction: row; + justify-content: space-between; + align-items: center; + gap: 0.75rem; + } +} + /* If you ever want to show it, add ".flex" class dynamically */ #playerModal.flex { display: flex;