mirror of
https://github.com/InvoiceShelf/InvoiceShelf.git
synced 2026-04-15 01:04:03 +00:00
Add glass UI with backdrop blur and fix primary button colors
Apply glassmorphism to sidebar, cards, tables, modals, dropdowns, and dialogs with semi-transparent backgrounds, backdrop-blur, and white/15 borders. Add subtle gradient body background for the blur to work against. Add dedicated btn-primary color tokens so primary buttons stay bold in dark mode instead of using the brightened text palette. Use shadow-sm to avoid heavy halos in light mode. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
15
resources/css/invoiceshelf.css
vendored
15
resources/css/invoiceshelf.css
vendored
@@ -41,6 +41,8 @@
|
||||
--color-hover-strong: var(--color-hover-strong);
|
||||
--color-header-from: var(--color-header-from);
|
||||
--color-header-to: var(--color-header-to);
|
||||
--color-btn-primary: var(--color-btn-primary);
|
||||
--color-btn-primary-hover: var(--color-btn-primary-hover);
|
||||
|
||||
/* Status badge text */
|
||||
--color-status-yellow: var(--color-status-yellow);
|
||||
@@ -63,6 +65,19 @@
|
||||
--font-base: Poppins, sans-serif;
|
||||
}
|
||||
|
||||
/* Glass UI background gradient */
|
||||
@utility bg-glass-gradient {
|
||||
background-image: linear-gradient(
|
||||
135deg,
|
||||
var(--color-surface-tertiary) 0%,
|
||||
color-mix(in srgb, var(--color-primary-500) 8%, var(--color-surface-tertiary)) 30%,
|
||||
var(--color-surface-tertiary) 50%,
|
||||
color-mix(in srgb, var(--color-primary-400) 6%, var(--color-surface-tertiary)) 70%,
|
||||
var(--color-surface-tertiary) 100%
|
||||
);
|
||||
background-attachment: fixed;
|
||||
}
|
||||
|
||||
@utility bg-multiselect-caret {
|
||||
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='h-5 w-5' viewBox='0 0 20 20' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M10 3a1 1 0 01.707.293l3 3a1 1 0 01-1.414 1.414L10 5.414 7.707 7.707a1 1 0 01-1.414-1.414l3-3A1 1 0 0110 3zm-3.707 9.293a1 1 0 011.414 0L10 14.586l2.293-2.293a1 1 0 011.414 1.414l-3 3a1 1 0 01-1.414 0l-3-3a1 1 0 010-1.414z' clip-rule='evenodd'/%3E%3C/svg%3E");
|
||||
}
|
||||
|
||||
8
resources/css/themes.css
vendored
8
resources/css/themes.css
vendored
@@ -36,6 +36,10 @@
|
||||
--color-header-from: rgb(74, 61, 255);
|
||||
--color-header-to: rgb(118, 117, 255);
|
||||
|
||||
/* Button colors (fixed, always bold) */
|
||||
--color-btn-primary: rgb(74, 61, 255);
|
||||
--color-btn-primary-hover: rgb(51, 22, 255);
|
||||
|
||||
/* Status badge text */
|
||||
--color-status-yellow: rgb(113, 63, 18);
|
||||
--color-status-green: rgb(20, 83, 45);
|
||||
@@ -93,6 +97,10 @@
|
||||
--color-header-from: rgb(51, 22, 255);
|
||||
--color-header-to: rgb(74, 61, 255);
|
||||
|
||||
/* Button colors (slightly brighter in dark for contrast) */
|
||||
--color-btn-primary: rgb(88, 75, 255);
|
||||
--color-btn-primary-hover: rgb(74, 61, 255);
|
||||
|
||||
/* Primary adjustments for dark mode */
|
||||
--color-primary-50: rgba(167, 170, 255, 0.15);
|
||||
--color-primary-100: rgba(167, 170, 255, 0.25);
|
||||
|
||||
@@ -124,8 +124,8 @@
|
||||
h-screen
|
||||
pb-32
|
||||
overflow-y-auto
|
||||
bg-surface
|
||||
border-r border-line-default border-solid
|
||||
bg-surface/80 backdrop-blur-xl
|
||||
border-r border-white/10
|
||||
xl:w-64
|
||||
md:fixed md:flex md:flex-col md:inset-y-0
|
||||
pt-16
|
||||
|
||||
@@ -81,7 +81,7 @@ const placeHolderSize = computed(() => {
|
||||
|
||||
const variantClass = computed(() => {
|
||||
return {
|
||||
'border-transparent shadow-xs text-white bg-primary-600 hover:bg-primary-700 focus:ring-primary-500':
|
||||
'border-transparent shadow-xs text-white bg-btn-primary hover:bg-btn-primary-hover focus:ring-primary-500':
|
||||
props.variant === 'primary',
|
||||
'border-transparent text-primary-700 bg-primary-100 hover:bg-primary-200 focus:ring-primary-500':
|
||||
props.variant === 'secondary',
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<template>
|
||||
<div class="bg-surface rounded-xl shadow border border-line-light">
|
||||
<div class="bg-surface/70 backdrop-blur-lg rounded-xl shadow-sm border border-white/15">
|
||||
<div
|
||||
v-if="hasHeaderSlot"
|
||||
class="px-5 py-4 text-heading border-b border-line-light border-solid"
|
||||
|
||||
@@ -59,8 +59,8 @@
|
||||
text-left
|
||||
align-bottom
|
||||
transition-all
|
||||
bg-surface
|
||||
rounded-lg
|
||||
bg-surface/80 backdrop-blur-2xl
|
||||
rounded-xl border border-white/15
|
||||
shadow-xl
|
||||
sm:my-8 sm:align-middle sm:w-full sm:p-6
|
||||
relative
|
||||
|
||||
@@ -69,7 +69,7 @@ const props = defineProps({
|
||||
})
|
||||
|
||||
const containerClasses = computed(() => {
|
||||
const baseClass = `origin-top-right rounded-md shadow-lg bg-surface ring-1 ring-black/5 divide-y divide-line-light focus:outline-hidden`
|
||||
const baseClass = `origin-top-right rounded-xl shadow-xl bg-surface/80 backdrop-blur-xl border border-white/15 divide-y divide-line-light focus:outline-hidden`
|
||||
return `${baseClass} ${props.containerClass}`
|
||||
})
|
||||
|
||||
|
||||
@@ -51,8 +51,8 @@
|
||||
<div
|
||||
:class="`inline-block
|
||||
align-middle
|
||||
bg-surface
|
||||
rounded-lg
|
||||
bg-surface/80 backdrop-blur-2xl
|
||||
rounded-xl border border-white/15
|
||||
text-left
|
||||
overflow-hidden
|
||||
relative
|
||||
|
||||
@@ -6,9 +6,9 @@
|
||||
class="
|
||||
relative
|
||||
overflow-hidden
|
||||
bg-surface
|
||||
border border-line-light
|
||||
shadow
|
||||
bg-surface/70 backdrop-blur-lg
|
||||
border border-white/15
|
||||
shadow-sm
|
||||
rounded-xl
|
||||
"
|
||||
>
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
</head>
|
||||
|
||||
<body
|
||||
class="h-full overflow-hidden bg-surface-tertiary font-base
|
||||
class="h-full overflow-hidden bg-surface-tertiary bg-glass-gradient font-base
|
||||
@if(isset($current_theme)) theme-{{ $current_theme }} @else theme-{{get_app_setting('admin_portal_theme') ?? 'invoiceshelf'}} @endif ">
|
||||
|
||||
<!-- Module Scripts -->
|
||||
|
||||
Reference in New Issue
Block a user