Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
369 changes: 340 additions & 29 deletions CodeQuest.Client/src/components/AvatarDialogModal.css
Original file line number Diff line number Diff line change
@@ -1,37 +1,348 @@
@keyframes sparkle {
.cq-dialog-backdrop {
--cq-ink: #2f1f16;
--cq-text: #4a2c1d;
--cq-text-soft: #6b4a38;
--cq-gold-100: #fff5da;
--cq-gold-200: #f7dbad;
--cq-gold-300: #e8be7f;
--cq-gold-500: #b67d34;
--cq-moss-500: #3f7a4d;
--cq-moss-600: #2f603d;
--cq-edge: #7a4f2d;
--cq-highlight: #ffe9ba;
--cq-focus: #347a4c;

position: fixed;
inset: 0;
z-index: 50;
display: flex;
align-items: center;
justify-content: center;
padding: clamp(1rem, 2.4vw, 2.25rem);
background:
radial-gradient(circle at 18% 12%, rgba(255, 214, 138, 0.22), transparent 58%),
radial-gradient(circle at 84% 86%, rgba(114, 168, 108, 0.17), transparent 62%),
rgba(13, 9, 5, 0.72);
backdrop-filter: blur(8px) saturate(1.02);
animation: cq-backdrop-in 220ms ease-out;
}

.cq-dialog-shell {
position: relative;
width: min(980px, 100%);
display: grid;
grid-template-columns: minmax(220px, 0.9fr) 1.6fr;
border-radius: 28px;
overflow: hidden;
border: 1px solid rgba(255, 229, 181, 0.48);
background:
linear-gradient(138deg, rgba(247, 217, 165, 0.95) 0%, rgba(240, 194, 132, 0.96) 52%, rgba(232, 181, 116, 0.96) 100%);
box-shadow:
0 30px 70px rgba(0, 0, 0, 0.5),
inset 0 0 0 1px rgba(255, 243, 221, 0.55);
animation: cq-dialog-in 300ms cubic-bezier(0.2, 0.9, 0.22, 1);
}

.cq-dialog-shell::before {
content: "";
position: absolute;
inset: 0;
pointer-events: none;
background:
linear-gradient(to bottom, rgba(255, 248, 229, 0.3) 0%, transparent 30%),
repeating-linear-gradient(35deg, rgba(110, 71, 39, 0.045) 0 2px, transparent 2px 10px);
mix-blend-mode: soft-light;
}

.cq-dialog-avatar-panel {
position: relative;
isolation: isolate;
display: flex;
flex-direction: column;
align-items: center;
justify-content: flex-end;
gap: 0.55rem;
padding: clamp(1rem, 2.4vw, 2rem) clamp(1rem, 1.8vw, 1.5rem);
border-right: 1px solid rgba(112, 72, 36, 0.32);
background:
radial-gradient(circle at 50% 12%, rgba(255, 250, 229, 0.65), transparent 58%),
linear-gradient(185deg, rgba(114, 137, 74, 0.16) 0%, rgba(84, 111, 55, 0.08) 42%, transparent 100%);
}

.cq-dialog-avatar-glow {
position: absolute;
top: 14%;
left: 50%;
width: 82%;
aspect-ratio: 1 / 1;
transform: translateX(-50%);
border-radius: 999px;
background:
radial-gradient(circle, rgba(255, 243, 202, 0.75) 0%, rgba(246, 204, 129, 0.34) 34%, rgba(246, 204, 129, 0.03) 76%);
filter: blur(1px);
pointer-events: none;
}

.cq-dialog-kicker {
margin: 0;
font-size: 0.7rem;
letter-spacing: 0.16em;
text-transform: uppercase;
color: rgba(88, 58, 37, 0.82);
font-weight: 700;
}

.cq-dialog-avatar-caption {
margin: 0;
font-family: "Fondamento", cursive;
font-size: clamp(0.95rem, 1.9vw, 1.1rem);
color: #6b4125;
}

.cq-dialog-avatar-frame {
width: min(100%, 258px);
padding: 0.5rem 0.8rem 0.45rem;
border-radius: 20px;
border: 1px solid rgba(122, 79, 45, 0.35);
background:
linear-gradient(to bottom, rgba(255, 248, 228, 0.6) 0%, rgba(241, 206, 154, 0.5) 100%);
box-shadow:
inset 0 1px 0 rgba(255, 252, 237, 0.8),
0 12px 24px rgba(66, 38, 16, 0.26);
}

.cq-dialog-avatar {
display: block;
width: 100%;
max-width: 220px;
margin-inline: auto;
object-fit: contain;
filter: drop-shadow(0 14px 16px rgba(45, 22, 10, 0.35));
transform: translateY(2px);
}

.cq-dialog-content {
position: relative;
z-index: 1;
display: flex;
flex-direction: column;
min-height: 330px;
padding: clamp(1.2rem, 2.3vw, 2rem) clamp(1.2rem, 2.8vw, 2.3rem);
gap: 1rem;
color: var(--cq-text);
}

.cq-dialog-header {
display: flex;
flex-direction: column;
gap: 0.15rem;
}

.cq-dialog-title {
margin: 0;
color: #4b2d1b;
font-family: "Fondamento", cursive;
font-size: clamp(1.5rem, 2.7vw, 2.05rem);
line-height: 1.12;
}

.cq-dialog-text {
margin: 0;
white-space: pre-line;
color: var(--cq-text);
font-size: clamp(0.95rem, 1.4vw, 1.04rem);
line-height: 1.65;
max-width: 68ch;
}

.cq-dialog-input-wrap {
display: flex;
flex-direction: column;
gap: 0.5rem;
}

.cq-dialog-input-label {
color: var(--cq-text-soft);
font-size: 0.78rem;
font-weight: 700;
letter-spacing: 0.04em;
text-transform: uppercase;
}

.cq-dialog-input {
width: 100%;
min-height: 2.75rem;
padding: 0.62rem 0.84rem;
border-radius: 12px;
border: 1px solid rgba(122, 79, 45, 0.48);
background: linear-gradient(to bottom, #fff9ea, #fff2d6);
color: var(--cq-ink);
font-size: 0.97rem;
box-shadow:
inset 0 1px 0 rgba(255, 255, 255, 0.85),
0 5px 10px rgba(83, 48, 23, 0.13);
transition:
border-color 160ms ease,
box-shadow 160ms ease,
transform 160ms ease;
}

.cq-dialog-input::placeholder {
color: #9d7a57;
}

.cq-dialog-input:focus-visible {
outline: none;
border-color: var(--cq-focus);
box-shadow:
0 0 0 3px rgba(52, 122, 76, 0.25),
0 5px 14px rgba(52, 122, 76, 0.2);
transform: translateY(-1px);
}

.cq-dialog-actions {
margin-top: auto;
display: flex;
justify-content: flex-end;
}

.cq-dialog-button {
min-width: 176px;
border: 1px solid rgba(24, 56, 34, 0.76);
border-radius: 12px;
padding: 0.68rem 1.14rem;
background: linear-gradient(180deg, #5a9963 0%, var(--cq-moss-500) 56%, var(--cq-moss-600) 100%);
color: #f5f7ed;
font-weight: 700;
letter-spacing: 0.01em;
cursor: pointer;
box-shadow:
0 10px 20px rgba(31, 60, 38, 0.28),
inset 0 1px 0 rgba(255, 255, 255, 0.26);
transition:
transform 140ms ease,
box-shadow 140ms ease,
filter 140ms ease;
}

.cq-dialog-button:hover:not(:disabled) {
transform: translateY(-1px);
box-shadow:
0 12px 24px rgba(31, 60, 38, 0.33),
inset 0 1px 0 rgba(255, 255, 255, 0.33);
filter: brightness(1.03);
}

.cq-dialog-button:focus-visible {
outline: none;
box-shadow:
0 0 0 3px rgba(52, 122, 76, 0.25),
0 10px 20px rgba(31, 60, 38, 0.28),
inset 0 1px 0 rgba(255, 255, 255, 0.26);
}

.cq-dialog-button:active:not(:disabled) {
transform: translateY(1px);
}

.cq-dialog-button:disabled {
opacity: 0.65;
cursor: not-allowed;
}

.cq-dialog-button--loading {
animation: cq-button-pulse 2.1s ease-in-out infinite;
}

@media (max-width: 860px) {
.cq-dialog-shell {
grid-template-columns: 1fr;
}

.cq-dialog-avatar-panel {
border-right: 0;
border-bottom: 1px solid rgba(112, 72, 36, 0.28);
align-items: flex-start;
gap: 0.3rem;
}

.cq-dialog-avatar-frame {
width: clamp(142px, 38vw, 198px);
}
}

@media (max-width: 560px) {
.cq-dialog-backdrop {
padding: 0.75rem;
}

.cq-dialog-shell {
border-radius: 20px;
}

.cq-dialog-content {
min-height: 0;
padding: 1rem;
gap: 0.8rem;
}

.cq-dialog-avatar-panel {
padding: 0.95rem 1rem;
}

.cq-dialog-avatar-caption {
font-size: 0.95rem;
}

.cq-dialog-button {
width: 100%;
min-width: 0;
}
}

@media (prefers-reduced-motion: reduce) {
.cq-dialog-backdrop,
.cq-dialog-shell,
.cq-dialog-button--loading {
animation: none;
}

.cq-dialog-input,
.cq-dialog-button {
transition: none;
}
}

@keyframes cq-backdrop-in {
from {
opacity: 0;
}
to {
opacity: 1;
}
}

@keyframes cq-dialog-in {
from {
opacity: 0;
transform: translateY(10px) scale(0.986);
}
to {
opacity: 1;
transform: translateY(0) scale(1);
}
}

@keyframes cq-button-pulse {
0%,
100% {
box-shadow:
0 0 0 0 rgba(47, 125, 50, 0.7),
inset 0 0 5px rgba(255, 255, 255, 0.3);
0 10px 20px rgba(31, 60, 38, 0.28),
inset 0 1px 0 rgba(255, 255, 255, 0.26);
}
50% {
box-shadow:
0 0 15px 5px rgba(76, 175, 80, 0.4),
inset 0 0 10px rgba(255, 255, 255, 0.6);
0 12px 22px rgba(51, 103, 61, 0.32),
inset 0 1px 0 rgba(255, 255, 255, 0.34);
}
}

@keyframes shimmer {
0% {
background-position: -1000px 0;
}
100% {
background-position: 1000px 0;
}
}

.sparkle-animation {
animation:
sparkle 1.5s ease-in-out infinite,
shimmer 2s ease-in-out infinite !important;
background: linear-gradient(
90deg,
#2f7d32 0%,
#4caf50 25%,
#2f7d32 50%,
#4caf50 75%,
#2f7d32 100%
);
background-size: 1000px 100%;
}
Loading
Loading