You've already forked Atomcms-edit
Improve overall CMS styling: refined design tokens, improved card/button/input components, circular avatars on me page
This commit is contained in:
@@ -14,14 +14,14 @@
|
||||
|
||||
@layer components {
|
||||
.dropdown-item {
|
||||
@apply w-full text-left px-2 py-1 transition duration-200 ease-in-out text-sm;
|
||||
@apply w-full text-left px-2 py-1 transition-all duration-200 ease-in-out text-sm;
|
||||
color: var(--color-text);
|
||||
border-radius: var(--radius-sm);
|
||||
}
|
||||
.dropdown-item:hover {
|
||||
background-color: var(--color-primary, #8770b2);
|
||||
color: var(--button-text-color, #ffffff);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
:focus {
|
||||
@@ -31,34 +31,32 @@
|
||||
body {
|
||||
overflow-x: hidden;
|
||||
color: var(--color-text, #ffffff);
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
}
|
||||
|
||||
/* Base text utility classes using CSS variables */
|
||||
.text-body { color: var(--color-text); }
|
||||
.text-muted { color: var(--color-text-muted); }
|
||||
.text-nav { color: var(--color-navbar-text); }
|
||||
.text-primary { color: var(--color-primary); }
|
||||
.text-on-primary { color: var(--button-text-color); }
|
||||
|
||||
/* Settings navigation */
|
||||
.settings-nav:hover,
|
||||
.settings-nav.active {
|
||||
background-color: var(--color-primary) !important;
|
||||
color: var(--button-text-color) !important;
|
||||
}
|
||||
|
||||
/* Dropdown panel */
|
||||
.dropdown-children {
|
||||
background-color: var(--color-dropdown, #ac93da);
|
||||
box-shadow: var(--dropdown-shadow, 0 4px 16px rgba(0,0,0,0.25));
|
||||
border-radius: var(--radius-md);
|
||||
}
|
||||
|
||||
/* Footer hover */
|
||||
.site-footer:hover {
|
||||
color: var(--color-text) !important;
|
||||
}
|
||||
|
||||
/* Navigation link hover states using CSS variables */
|
||||
.nav-link {
|
||||
color: var(--color-navbar-text);
|
||||
transition: color 200ms ease-in-out;
|
||||
@@ -67,7 +65,6 @@ body {
|
||||
color: var(--color-primary);
|
||||
}
|
||||
|
||||
/* Text shadow for readability on images/dark backgrounds */
|
||||
.text-shadow { text-shadow: 0 1px 3px rgba(0,0,0,0.8); }
|
||||
.text-shadow-sm { text-shadow: 0 1px 2px rgba(0,0,0,0.6); }
|
||||
.text-shadow-lg { text-shadow: 0 2px 8px rgba(0,0,0,0.9); }
|
||||
@@ -108,7 +105,7 @@ textarea::placeholder {
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
background: rgba(46, 45, 45, 0.7); /* Black overlay with 60% opacity */
|
||||
background: rgba(46, 45, 45, 0.7);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -124,17 +121,10 @@ textarea::placeholder {
|
||||
width: 40px;
|
||||
filter: grayscale(1);
|
||||
transition: filter 300ms ease-in-out;
|
||||
|
||||
}
|
||||
|
||||
a:hover .icon {
|
||||
filter: grayscale(0);
|
||||
}
|
||||
|
||||
.dropdown-parent:hover .icon {
|
||||
filter: grayscale(0);
|
||||
}
|
||||
|
||||
a:hover .icon,
|
||||
.dropdown-parent:hover .icon,
|
||||
.dropdown-parent:active .icon {
|
||||
filter: grayscale(0);
|
||||
}
|
||||
@@ -142,13 +132,8 @@ textarea::placeholder {
|
||||
a.active, div.active {
|
||||
color: #ac93da;
|
||||
|
||||
.dropdown-children {
|
||||
color: #FFFFFF;
|
||||
}
|
||||
|
||||
.icon {
|
||||
filter: grayscale(0);
|
||||
}
|
||||
.dropdown-children { color: #FFFFFF; }
|
||||
.icon { filter: grayscale(0); }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -194,51 +179,24 @@ textarea::placeholder {
|
||||
text-shadow: 0 1px 3px rgba(0,0,0,0.8);
|
||||
}
|
||||
|
||||
.swiper-button-prev {
|
||||
z-index: 15 !important;
|
||||
.swiper-button-prev { z-index: 15 !important; }
|
||||
.swiper-button-next { z-index: 15 !important; }
|
||||
|
||||
.icon-base {
|
||||
background-repeat: no-repeat;
|
||||
background-position: center;
|
||||
background-size: contain;
|
||||
}
|
||||
|
||||
.swiper-button-next {
|
||||
z-index: 15 !important;
|
||||
}
|
||||
|
||||
|
||||
.hotel-icon {
|
||||
background: url("/public/assets/images/icons/feeds.png") no-repeat center;
|
||||
}
|
||||
|
||||
.chat-icon {
|
||||
background: url("/public/assets/images/icons/chat.png") no-repeat center;
|
||||
}
|
||||
|
||||
.article-icon {
|
||||
background: url("/public/assets/images/icons/article.gif") no-repeat center;
|
||||
}
|
||||
|
||||
.lighthouse-icon {
|
||||
background: url("/public/assets/images/icons/lighthouse.png") no-repeat center;
|
||||
}
|
||||
|
||||
.currency-icon {
|
||||
background: url("/public/assets/images/dusk/store_icon.png") no-repeat center;
|
||||
}
|
||||
|
||||
.catalog-icon {
|
||||
background: url("/public/assets/images/icons/catalog.png") no-repeat center;
|
||||
}
|
||||
|
||||
.inventory-icon {
|
||||
background: url("/public/assets/images/icons/inventory.png") no-repeat center;
|
||||
}
|
||||
|
||||
.duo-chat-icon {
|
||||
background: url("/public/assets/images/icons/due-chat.png") no-repeat center;
|
||||
}
|
||||
|
||||
|
||||
.friends-icon {
|
||||
background: #b17f85 url("/public/assets/images/icons/friends.png") no-repeat center;
|
||||
}
|
||||
.hotel-icon { background: url("/public/assets/images/icons/feeds.png") no-repeat center; }
|
||||
.chat-icon { background: url("/public/assets/images/icons/chat.png") no-repeat center; }
|
||||
.article-icon { background: url("/public/assets/images/icons/article.gif") no-repeat center; }
|
||||
.lighthouse-icon { background: url("/public/assets/images/icons/lighthouse.png") no-repeat center; }
|
||||
.currency-icon { background: url("/public/assets/images/dusk/store_icon.png") no-repeat center; }
|
||||
.catalog-icon { background: url("/public/assets/images/icons/catalog.png") no-repeat center; }
|
||||
.inventory-icon { background: url("/public/assets/images/icons/inventory.png") no-repeat center; }
|
||||
.duo-chat-icon { background: url("/public/assets/images/icons/due-chat.png") no-repeat center; }
|
||||
.friends-icon { background: #b17f85 url("/public/assets/images/icons/friends.png") no-repeat center; }
|
||||
|
||||
.nav-credit-icon {
|
||||
background: #e9b124 url("/public/assets/images/icons/currency/credits.png") no-repeat center;
|
||||
@@ -275,55 +233,24 @@ textarea::placeholder {
|
||||
height: 25px;
|
||||
width: 25px;
|
||||
|
||||
&.first {
|
||||
background-image: url("/public/assets/images/leaderboards/trophy-gold.png");
|
||||
}
|
||||
|
||||
&.second {
|
||||
background-image: url("/public/assets/images/leaderboards/trophy-silver.png");
|
||||
}
|
||||
|
||||
&.third {
|
||||
background-image: url("/public/assets/images/leaderboards/trophy-bronze.png");
|
||||
}
|
||||
&.first { background-image: url("/public/assets/images/leaderboards/trophy-gold.png"); }
|
||||
&.second { background-image: url("/public/assets/images/leaderboards/trophy-silver.png"); }
|
||||
&.third { background-image: url("/public/assets/images/leaderboards/trophy-bronze.png"); }
|
||||
}
|
||||
|
||||
.leaderboard-background {
|
||||
background-image: url("/public/assets/images/dusk/leaderboard_circle_image.png");
|
||||
}
|
||||
|
||||
.staff-bg {
|
||||
background-blend-mode: multiply;
|
||||
}
|
||||
.staff-bg { background-blend-mode: multiply; }
|
||||
#disconnected { display: none; }
|
||||
|
||||
/* Nitro disconnect overlay */
|
||||
#disconnected {
|
||||
display: none;
|
||||
}
|
||||
.atom-align-left { float: left; margin: 0 10px 10px 0; }
|
||||
.atom-align-right { float: right; margin: 0 0 10px 10px; }
|
||||
.atom-align-center { display: block; margin: 0 auto; text-align: center; }
|
||||
.atom-align-center > * { text-align: center; }
|
||||
|
||||
.atom-align-left {
|
||||
float: left;
|
||||
margin: 0 10px 10px 0;
|
||||
}
|
||||
|
||||
.atom-align-right {
|
||||
float: right;
|
||||
margin: 0 0 10px 10px;
|
||||
}
|
||||
|
||||
.atom-align-center {
|
||||
display: block;
|
||||
margin: 0 auto;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.atom-align-center > * {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#article-content a {
|
||||
color: #53b2f8;
|
||||
}
|
||||
#article-content a { color: #53b2f8; }
|
||||
|
||||
.badge-drawer-button {
|
||||
background-image: linear-gradient(to bottom, #f2f2f3 51%, #d9d8d8 49%);
|
||||
@@ -335,12 +262,9 @@ textarea::placeholder {
|
||||
box-shadow: inset 0 0 0px 2px #ffffff;
|
||||
}
|
||||
|
||||
.toggled {
|
||||
background: #f2f2f3;
|
||||
}
|
||||
.toggled { background: #f2f2f3; }
|
||||
}
|
||||
|
||||
|
||||
html.dark .badge-drawer-button {
|
||||
background-image: linear-gradient(to bottom, #141414 51%, #101010 49%);
|
||||
box-shadow: inset 0 0 0px 2px #242424;
|
||||
@@ -351,9 +275,7 @@ html.dark .badge-drawer-button {
|
||||
box-shadow: inset 0 0 0px 2px #363636;
|
||||
}
|
||||
|
||||
.toggled {
|
||||
background: #f2f2f3;
|
||||
}
|
||||
.toggled { background: #f2f2f3; }
|
||||
}
|
||||
|
||||
.badge-drawer-palette {
|
||||
@@ -386,3 +308,26 @@ html.dark .badge-drawer-button {
|
||||
opacity: .1;
|
||||
}
|
||||
}
|
||||
|
||||
.transition-base { transition: all 0.2s ease-in-out; }
|
||||
.transition-smooth { transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); }
|
||||
|
||||
.hover-lift {
|
||||
transition: transform 0.2s ease, box-shadow 0.2s ease;
|
||||
}
|
||||
.hover-lift:hover {
|
||||
transform: translateY(-2px);
|
||||
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
|
||||
.card-base {
|
||||
background-color: var(--color-surface);
|
||||
border-radius: var(--radius-md);
|
||||
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);
|
||||
border: 1px solid color-mix(in srgb, var(--color-text-muted) 15%, transparent);
|
||||
}
|
||||
|
||||
.card-base:hover {
|
||||
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.25);
|
||||
border-color: color-mix(in srgb, var(--color-text-muted) 25%, transparent);
|
||||
}
|
||||
|
||||
@@ -1,17 +1,19 @@
|
||||
|
||||
@props(['icon' => '', 'classes' => ''])
|
||||
|
||||
<div class="w-full flex flex-col gap-y-4 rounded-lg overflow-hidden bg-[#2b303c] pb-4 shadow-sm {{ $classes }}" style="color: var(--color-text);">
|
||||
<div class="flex gap-x-2 bg-[#21242e] p-3">
|
||||
<div class="w-full flex flex-col gap-y-4 rounded-xl overflow-hidden pb-4 shadow-sm border {{ $classes }}"
|
||||
style="background-color: var(--color-surface); color: var(--color-text); border-color: color-mix(in srgb, var(--color-text-muted) 15%, transparent);">
|
||||
<div class="flex gap-x-2.5 p-3.5 rounded-t-xl"
|
||||
style="background-color: color-mix(in srgb, var(--color-primary) 8%, var(--color-surface)); border-bottom: 1px solid color-mix(in srgb, var(--color-primary) 20%, transparent);">
|
||||
@if (!empty($icon))
|
||||
<div class="max-w-12.5 max-h-12.5 min-w-12.5 min-h-12.5 rounded-full relative flex items-center justify-center {{ $icon }}"></div>
|
||||
<div class="w-[50px] h-[50px] min-w-[50px] rounded-full flex items-center justify-center {{ $icon }} shadow-sm"></div>
|
||||
@endif
|
||||
|
||||
<div class="flex flex-col justify-center text-sm">
|
||||
<p class="font-semibold">{{ $title }}</p>
|
||||
|
||||
@if(isset($underTitle))
|
||||
<p class="text-muted">{{ $underTitle }}</p>
|
||||
<p class="text-xs mt-0.5 text-muted">{{ $underTitle }}</p>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
@props(['classes' => '', 'type' => 'submit'])
|
||||
|
||||
<button type="{{ $type }}"
|
||||
class="w-full rounded bg-[var(--button-danger-color)] hover:bg-[var(--button-danger-hover-color)] text-[var(--button-danger-text-color)] border-2 border-[var(--button-danger-border-color)] transition ease-in-out duration-150 font-semibold px-6 py-2 {{ $classes }}">
|
||||
class="w-full rounded-lg bg-[var(--button-danger-color)] hover:bg-[var(--button-danger-hover-color)] text-[var(--button-danger-text-color)] border-2 border-[var(--button-danger-border-color)] transition-all ease-in-out duration-200 font-semibold px-6 py-2.5 {{ $classes }}"
|
||||
style="border-radius: var(--border-radius); box-shadow: 0 1px 2px rgba(0,0,0,0.1);"
|
||||
onmouseover="this.style.boxShadow='0 2px 8px rgba(0,0,0,0.15)'; this.style.transform='translateY(-1px)'"
|
||||
onmouseout="this.style.boxShadow='0 1px 2px rgba(0,0,0,0.1)'; this.style.transform='translateY(0)'">
|
||||
{{ $slot }}
|
||||
</button>
|
||||
|
||||
@@ -1,14 +1,17 @@
|
||||
@props(['errorBag' => '', 'classes' => '', 'name', 'type' => 'text', 'value' => '', 'placeholder' => '', 'required' => true, 'autofocus' => false, 'readonly' => false])
|
||||
|
||||
<input
|
||||
class="{{ $classes }} focus:ring-0 border-2 rounded w-full @error($name, $errorBag) !border-red-600 ring-red-500 @enderror" style="border-color: var(--input-border-color, #4b5563); background-color: var(--input-background, #21242e); color: var(--input-text-color, #e2e8f0);"
|
||||
class="{{ $classes }} focus:ring-0 border-2 rounded-lg w-full px-4 py-2.5 transition-all duration-200 @error($name, $errorBag) !border-red-500 @enderror"
|
||||
style="border-color: var(--input-border-color, #4b5563); background-color: var(--input-background, #21242e); color: var(--input-text-color, #e2e8f0);"
|
||||
id="{{ $name }}" type="{{ $type }}" name="{{ $name }}" value="{{ $value }}"
|
||||
autocomplete="{{ $name }}" placeholder="{{ $placeholder }}" @if ($readonly) required @endif
|
||||
autocomplete="{{ $name }}" placeholder="{{ $placeholder }}" @if ($required) required @endif
|
||||
@if ($autofocus) autofocus="{{ $name }}" @endif
|
||||
@if ($readonly) readonly @endif>
|
||||
@if ($readonly) readonly @endif
|
||||
onfocus="this.style.borderColor='var(--color-primary)'; this.style.boxShadow='0 0 0 3px color-mix(in srgb, var(--color-primary) 20%, transparent)'"
|
||||
onblur="this.style.borderColor='var(--input-border-color, #4b5563)'; this.style.boxShadow='none'">
|
||||
|
||||
@error($name, $errorBag)
|
||||
<p class="mt-1 text-xs italic" style="color: var(--button-danger-color, #ef4444);">
|
||||
<p class="mt-1.5 text-xs font-medium" style="color: var(--button-danger-color, #ef4444);">
|
||||
{{ $message }}
|
||||
</p>
|
||||
@enderror
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
@props(['classes' => '', 'type' => 'submit'])
|
||||
|
||||
<button type="{{ $type }}"
|
||||
class="w-full rounded bg-transparent hover:bg-[var(--button-outline-hover-color)] text-[var(--button-outline-text-color)] border-2 border-[var(--button-outline-color)] transition ease-in-out duration-150 font-semibold px-6 py-2 {{ $classes }}">
|
||||
class="w-full rounded-lg bg-transparent hover:bg-[var(--button-outline-hover-color)] text-[var(--button-outline-text-color)] border-2 border-[var(--button-outline-color)] transition-all ease-in-out duration-200 font-semibold px-6 py-2.5 {{ $classes }}"
|
||||
style="border-radius: var(--border-radius); box-shadow: 0 1px 2px rgba(0,0,0,0.1);"
|
||||
onmouseover="this.style.boxShadow='0 2px 8px rgba(0,0,0,0.15)'; this.style.transform='translateY(-1px)'"
|
||||
onmouseout="this.style.boxShadow='0 1px 2px rgba(0,0,0,0.1)'; this.style.transform='translateY(0)'">
|
||||
{{ $slot }}
|
||||
</button>
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
@props(['classes' => '', 'type' => 'submit'])
|
||||
|
||||
<button type="{{ $type }}"
|
||||
class="{{ $classes }} w-full rounded p-2 border-2 transition ease-in-out duration-200 font-semibold" style="background-color: var(--button-color); color: var(--button-text-color); border-color: var(--button-color);">
|
||||
class="{{ $classes }} w-full rounded-lg px-6 py-2.5 border-2 transition-all ease-in-out duration-200 font-semibold"
|
||||
style="background-color: var(--button-color); color: var(--button-text-color); border-color: var(--button-color); border-radius: var(--border-radius); box-shadow: 0 1px 2px rgba(0,0,0,0.1);"
|
||||
onmouseover="this.style.boxShadow='0 2px 8px rgba(0,0,0,0.15)'; this.style.transform='translateY(-1px)'"
|
||||
onmouseout="this.style.boxShadow='0 1px 2px rgba(0,0,0,0.1)'; this.style.transform='translateY(0)'">
|
||||
{{ $slot }}
|
||||
</button>
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
@props(['classes' => '', 'type' => 'submit'])
|
||||
|
||||
<button type="{{ $type }}"
|
||||
class="w-full rounded bg-[var(--button-secondary-color)] hover:bg-[var(--button-secondary-hover-color)] text-[var(--button-secondary-text-color)] border-2 border-[var(--button-secondary-border-color)] transition ease-in-out duration-150 font-semibold px-6 py-2 {{ $classes }}">
|
||||
class="w-full rounded-lg bg-[var(--button-secondary-color)] hover:bg-[var(--button-secondary-hover-color)] text-[var(--button-secondary-text-color)] border-2 border-[var(--button-secondary-border-color)] transition-all ease-in-out duration-200 font-semibold px-6 py-2.5 {{ $classes }}"
|
||||
style="border-radius: var(--border-radius); box-shadow: 0 1px 2px rgba(0,0,0,0.1);"
|
||||
onmouseover="this.style.boxShadow='0 2px 8px rgba(0,0,0,0.15)'; this.style.transform='translateY(-1px)'"
|
||||
onmouseout="this.style.boxShadow='0 1px 2px rgba(0,0,0,0.1)'; this.style.transform='translateY(0)'">
|
||||
{{ $slot }}
|
||||
</button>
|
||||
|
||||
@@ -6,9 +6,11 @@
|
||||
<div class="block lg:hidden w-40">
|
||||
<a href="{{ route('profile.show', $user) }}"
|
||||
class="absolute bottom-2 -left-4 lg:left-8 drop-shadow transition duration-300 ease-in-out hover:scale-105">
|
||||
<img style="image-rendering: pixelated;"
|
||||
src="{{ setting('avatar_imager') }}{{ $user->look }}&direction=2&head_direction=3&gesture=sml&action=wav&size=l"
|
||||
alt="">
|
||||
<div class="rounded-full overflow-hidden border-2 border-gray-300 w-[100px] h-[100px]">
|
||||
<img style="image-rendering: pixelated;"
|
||||
src="{{ setting('avatar_imager') }}{{ $user->look }}&direction=2&head_direction=3&gesture=sml&action=wav&size=l"
|
||||
alt="">
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user