diff --git a/DysonNetwork.Sphere/Pages/Account/Profile.cshtml b/DysonNetwork.Sphere/Pages/Account/Profile.cshtml index 78ad11b..17bdfc3 100644 --- a/DysonNetwork.Sphere/Pages/Account/Profile.cshtml +++ b/DysonNetwork.Sphere/Pages/Account/Profile.cshtml @@ -4,75 +4,340 @@ ViewData["Title"] = "Profile"; } -
-
-

User Profile

- - @if (Model.Account != null) - { -
-

Account Information

-

Username: @Model.Account.Name

-

Nickname: @Model.Account.Nick

-

Language: @Model.Account.Language

-

- Activated: @Model.Account.ActivatedAt?.ToString("yyyy-MM-dd HH:mm", System.Globalization.CultureInfo.InvariantCulture) -

-

Superuser: @Model.Account.IsSuperuser -

+@if (Model.Account != null) +{ +
+
+ +
+

Profile Settings

+

Manage your account information and preferences

-
-

Profile Details

-

- Name: @Model.Account.Profile.FirstName @Model.Account.Profile.MiddleName @Model.Account.Profile.LastName -

-

Bio: @Model.Account.Profile.Bio

-

Gender: @Model.Account.Profile.Gender -

-

- Location: @Model.Account.Profile.Location

-

- Birthday: @Model.Account.Profile.Birthday?.ToString("yyyy-MM-dd", System.Globalization.CultureInfo.InvariantCulture) -

-

- Experience: @Model.Account.Profile.Experience

-

Level: @Model.Account.Profile.Level -

-
+ +
+ +
+
+
+ +
+ + @Model.Account.Name?.Substring(0, 1).ToUpper() + +
-
-

Access Token

-
- - + +

+ @Model.Account.Nick +

+

@Model.Account.Name

+ + +
+
+
@Model.Account.Profile.Level
+
Level
+
+
+
@Model.Account.Profile.Experience
+
XP
+
+
+
+ @Model.Account.CreatedAt.ToDateTimeUtc().ToString("yyyy/MM/dd") +
+
Member since
+
+
+
+
+
+ + +
+
+ +
+ +
+ + +
+ +
+

Profile + Information

+ +
+
+

Basic + Information

+
+
+
Full + Name +
+
+ @($"{Model.Account.Profile.FirstName} {Model.Account.Profile.MiddleName} {Model.Account.Profile.LastName}".Trim()) +
+
+
+
+ Username +
+
@Model.Account.Name
+
+
+
+ Nickname +
+
@Model.Account.Nick
+
+
+
+ Gender +
+
@Model.Account.Profile.Gender
+
+
+
+ +
+

Additional + Details

+
+
+
+ Location +
+
@Model.Account.Profile.Location
+
+
+
+ Birthday +
+
+ @Model.Account.Profile.Birthday?.ToString("MMMM d, yyyy", System.Globalization.CultureInfo.InvariantCulture) +
+
+
+
Bio +
+
+ @(string.IsNullOrEmpty(Model.Account.Profile.Bio) ? "No bio provided" : Model.Account.Profile.Bio) +
+
+
+
+
+ +
+ +
+
+ + + + + + +
+
+ + +
+
+ +
+
- -
- -
- } - else - { -

User profile not found. Please log in.

- } +
-
+} +else +{ +
+
+
+ +
+

Profile Not Found

+

User profile not found. Please log in to continue.

+ + Go to Login + +
+
+} - \ No newline at end of file +@section Scripts { + +} \ No newline at end of file diff --git a/DysonNetwork.Sphere/wwwroot/css/styles.css b/DysonNetwork.Sphere/wwwroot/css/styles.css index 662fe0c..5837219 100644 --- a/DysonNetwork.Sphere/wwwroot/css/styles.css +++ b/DysonNetwork.Sphere/wwwroot/css/styles.css @@ -20,11 +20,13 @@ --color-green-600: oklch(62.7% 0.194 149.214); --color-green-800: oklch(44.8% 0.119 151.328); --color-green-900: oklch(39.3% 0.095 152.535); + --color-blue-100: oklch(93.2% 0.032 255.585); --color-blue-300: oklch(80.9% 0.105 251.813); --color-blue-400: oklch(70.7% 0.165 254.624); --color-blue-500: oklch(62.3% 0.214 259.815); --color-blue-600: oklch(54.6% 0.245 262.881); --color-blue-700: oklch(48.8% 0.243 264.376); + --color-blue-900: oklch(37.9% 0.146 265.522); --color-gray-50: oklch(98.5% 0.002 247.839); --color-gray-100: oklch(96.7% 0.003 264.542); --color-gray-200: oklch(92.8% 0.006 264.531); @@ -40,7 +42,10 @@ --container-md: 28rem; --container-lg: 32rem; --container-2xl: 42rem; + --container-6xl: 72rem; --container-7xl: 80rem; + --text-xs: 0.75rem; + --text-xs--line-height: calc(1 / 0.75); --text-sm: 0.875rem; --text-sm--line-height: calc(1.25 / 0.875); --text-lg: 1.125rem; @@ -53,6 +58,8 @@ --text-3xl--line-height: calc(2.25 / 1.875); --text-4xl: 2.25rem; --text-4xl--line-height: calc(2.5 / 2.25); + --text-5xl: 3rem; + --text-5xl--line-height: 1; --text-6xl: 3.75rem; --text-6xl--line-height: 1; --font-weight-medium: 500; @@ -225,9 +232,15 @@ .static { position: static; } + .sticky { + position: sticky; + } .top-0 { top: calc(var(--spacing) * 0); } + .top-8 { + top: calc(var(--spacing) * 8); + } .right-0 { right: calc(var(--spacing) * 0); } @@ -264,6 +277,9 @@ .mt-1 { margin-top: calc(var(--spacing) * 1); } + .mt-2 { + margin-top: calc(var(--spacing) * 2); + } .mt-4 { margin-top: calc(var(--spacing) * 4); } @@ -282,6 +298,12 @@ .mt-\[64px\] { margin-top: 64px; } + .mr-1 { + margin-right: calc(var(--spacing) * 1); + } + .-mb-px { + margin-bottom: -1px; + } .mb-1 { margin-bottom: calc(var(--spacing) * 1); } @@ -315,18 +337,33 @@ .flex { display: flex; } + .grid { + display: grid; + } .hidden { display: none; } .inline { display: inline; } + .inline-flex { + display: inline-flex; + } .table { display: table; } + .h-6 { + height: calc(var(--spacing) * 6); + } + .h-10 { + height: calc(var(--spacing) * 10); + } .h-16 { height: calc(var(--spacing) * 16); } + .h-32 { + height: calc(var(--spacing) * 32); + } .h-\[calc\(100dvh-118px\)\] { height: calc(100dvh - 118px); } @@ -336,18 +373,36 @@ .min-h-screen { min-height: 100vh; } + .w-6 { + width: calc(var(--spacing) * 6); + } + .w-10 { + width: calc(var(--spacing) * 10); + } + .w-32 { + width: calc(var(--spacing) * 32); + } .w-full { width: 100%; } .max-w-2xl { max-width: var(--container-2xl); } + .max-w-6xl { + max-width: var(--container-6xl); + } .max-w-lg { max-width: var(--container-lg); } .max-w-md { max-width: var(--container-md); } + .flex-1 { + flex: 1; + } + .flex-shrink-0 { + flex-shrink: 0; + } .flex-grow { flex-grow: 1; } @@ -360,18 +415,33 @@ .resize { resize: both; } + .grid-cols-1 { + grid-template-columns: repeat(1, minmax(0, 1fr)); + } .flex-col { flex-direction: column; } .items-center { align-items: center; } + .justify-around { + justify-content: space-around; + } .justify-between { justify-content: space-between; } .justify-center { justify-content: center; } + .justify-end { + justify-content: flex-end; + } + .gap-6 { + gap: calc(var(--spacing) * 6); + } + .gap-8 { + gap: calc(var(--spacing) * 8); + } .space-y-4 { :where(& > :not(:last-child)) { --tw-space-y-reverse: 0; @@ -379,14 +449,41 @@ margin-block-end: calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse))); } } + .space-y-6 { + :where(& > :not(:last-child)) { + --tw-space-y-reverse: 0; + margin-block-start: calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse)); + margin-block-end: calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse))); + } + } .gap-x-6 { column-gap: calc(var(--spacing) * 6); } + .divide-y { + :where(& > :not(:last-child)) { + --tw-divide-y-reverse: 0; + border-bottom-style: var(--tw-border-style); + border-top-style: var(--tw-border-style); + border-top-width: calc(1px * var(--tw-divide-y-reverse)); + border-bottom-width: calc(1px * calc(1 - var(--tw-divide-y-reverse))); + } + } + .divide-gray-200 { + :where(& > :not(:last-child)) { + border-color: var(--color-gray-200); + } + } .truncate { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } + .overflow-hidden { + overflow: hidden; + } + .rounded-full { + border-radius: calc(infinity * 1px); + } .rounded-lg { border-radius: var(--radius-lg); } @@ -401,9 +498,33 @@ border-style: var(--tw-border-style); border-width: 2px; } + .border-t { + border-top-style: var(--tw-border-style); + border-top-width: 1px; + } + .border-b { + border-bottom-style: var(--tw-border-style); + border-bottom-width: 1px; + } + .border-b-2 { + border-bottom-style: var(--tw-border-style); + border-bottom-width: 2px; + } + .border-blue-500 { + border-color: var(--color-blue-500); + } + .border-gray-200 { + border-color: var(--color-gray-200); + } .border-gray-300 { border-color: var(--color-gray-300); } + .border-transparent { + border-color: transparent; + } + .bg-blue-100 { + background-color: var(--color-blue-100); + } .bg-blue-500 { background-color: var(--color-blue-500); } @@ -416,6 +537,9 @@ .bg-gray-100 { background-color: var(--color-gray-100); } + .bg-gray-200 { + background-color: var(--color-gray-200); + } .bg-green-100 { background-color: var(--color-green-100); } @@ -437,6 +561,9 @@ .p-8 { padding: calc(var(--spacing) * 8); } + .px-2\.5 { + padding-inline: calc(var(--spacing) * 2.5); + } .px-3 { padding-inline: calc(var(--spacing) * 3); } @@ -449,15 +576,33 @@ .px-8 { padding-inline: calc(var(--spacing) * 8); } + .py-0\.5 { + padding-block: calc(var(--spacing) * 0.5); + } .py-2 { padding-block: calc(var(--spacing) * 2); } .py-3 { padding-block: calc(var(--spacing) * 3); } + .py-4 { + padding-block: calc(var(--spacing) * 4); + } + .py-5 { + padding-block: calc(var(--spacing) * 5); + } + .py-8 { + padding-block: calc(var(--spacing) * 8); + } .py-12 { padding-block: calc(var(--spacing) * 12); } + .pt-4 { + padding-top: calc(var(--spacing) * 4); + } + .pt-6 { + padding-top: calc(var(--spacing) * 6); + } .pt-8 { padding-top: calc(var(--spacing) * 8); } @@ -470,6 +615,9 @@ .text-left { text-align: left; } + .text-right { + text-align: right; + } .text-2xl { font-size: var(--text-2xl); line-height: var(--tw-leading, var(--text-2xl--line-height)); @@ -482,6 +630,10 @@ font-size: var(--text-4xl); line-height: var(--tw-leading, var(--text-4xl--line-height)); } + .text-5xl { + font-size: var(--text-5xl); + line-height: var(--tw-leading, var(--text-5xl--line-height)); + } .text-lg { font-size: var(--text-lg); line-height: var(--tw-leading, var(--text-lg--line-height)); @@ -494,6 +646,14 @@ font-size: var(--text-xl); line-height: var(--tw-leading, var(--text-xl--line-height)); } + .text-xs { + font-size: var(--text-xs); + line-height: var(--tw-leading, var(--text-xs--line-height)); + } + .leading-6 { + --tw-leading: calc(var(--spacing) * 6); + line-height: calc(var(--spacing) * 6); + } .leading-8 { --tw-leading: calc(var(--spacing) * 8); line-height: calc(var(--spacing) * 8); @@ -556,6 +716,10 @@ .opacity-80 { opacity: 80%; } + .shadow { + --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1)); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } .shadow-\[0_-1px_3px_0_rgba\(0\,0\,0\,0\.1\)\] { --tw-shadow: 0 -1px 3px 0 var(--tw-shadow-color, rgba(0,0,0,0.1)); box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); @@ -598,6 +762,13 @@ } } } + .hover\:border-gray-300 { + &:hover { + @media (hover: hover) { + border-color: var(--color-gray-300); + } + } + } .hover\:bg-blue-600 { &:hover { @media (hover: hover) { @@ -612,6 +783,13 @@ } } } + .hover\:bg-gray-50 { + &:hover { + @media (hover: hover) { + background-color: var(--color-gray-50); + } + } + } .hover\:bg-gray-100 { &:hover { @media (hover: hover) { @@ -679,23 +857,76 @@ --tw-ring-color: var(--color-red-500); } } + .focus\:ring-offset-2 { + &:focus { + --tw-ring-offset-width: 2px; + --tw-ring-offset-shadow: var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); + } + } .focus\:outline-none { &:focus { --tw-outline-style: none; outline-style: none; } } + .sm\:rounded-lg { + @media (width >= 40rem) { + border-radius: var(--radius-lg); + } + } + .sm\:px-6 { + @media (width >= 40rem) { + padding-inline: calc(var(--spacing) * 6); + } + } .sm\:text-6xl { @media (width >= 40rem) { font-size: var(--text-6xl); line-height: var(--tw-leading, var(--text-6xl--line-height)); } } + .md\:w-1\/3 { + @media (width >= 48rem) { + width: calc(1/3 * 100%); + } + } + .md\:grid-cols-2 { + @media (width >= 48rem) { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } + } + .md\:flex-row { + @media (width >= 48rem) { + flex-direction: row; + } + } + .lg\:w-1\/4 { + @media (width >= 64rem) { + width: calc(1/4 * 100%); + } + } + .dark\:divide-gray-700 { + @media (prefers-color-scheme: dark) { + :where(& > :not(:last-child)) { + border-color: var(--color-gray-700); + } + } + } .dark\:border-gray-600 { @media (prefers-color-scheme: dark) { border-color: var(--color-gray-600); } } + .dark\:border-gray-700 { + @media (prefers-color-scheme: dark) { + border-color: var(--color-gray-700); + } + } + .dark\:bg-blue-900 { + @media (prefers-color-scheme: dark) { + background-color: var(--color-blue-900); + } + } .dark\:bg-gray-700 { @media (prefers-color-scheme: dark) { background-color: var(--color-gray-700); @@ -788,6 +1019,15 @@ } } } + .dark\:hover\:text-gray-200 { + @media (prefers-color-scheme: dark) { + &:hover { + @media (hover: hover) { + color: var(--color-gray-200); + } + } + } + } .dark\:hover\:text-gray-300 { @media (prefers-color-scheme: dark) { &:hover { @@ -1044,6 +1284,11 @@ inherits: false; initial-value: 0; } +@property --tw-divide-y-reverse { + syntax: "*"; + inherits: false; + initial-value: 0; +} @property --tw-border-style { syntax: "*"; inherits: false; @@ -1208,6 +1453,7 @@ --tw-skew-x: initial; --tw-skew-y: initial; --tw-space-y-reverse: 0; + --tw-divide-y-reverse: 0; --tw-border-style: solid; --tw-leading: initial; --tw-font-weight: initial;