Files
OSGAccountServer/admin-web/src/styles.css
T
Rocky 0b4acb5978
CI / verify (push) Has been cancelled
CI / publish (push) Has been cancelled
Visualize admin analytics dashboards
Turn operational, product, and referral metrics into accessible charts so trends, funnels, retention, and channel quality are faster to interpret.
2026-08-20 16:02:21 +08:00

511 lines
9.3 KiB
CSS

@import "tailwindcss";
@custom-variant dark (&:where(.dark, .dark *));
@theme inline {
--font-sans:
-apple-system, BlinkMacSystemFont, "SF Pro Text", "SF Pro Display",
"Helvetica Neue", "PingFang SC", system-ui, sans-serif;
--font-mono: "SFMono-Regular", Consolas, "Liberation Mono", monospace;
--color-page: var(--page);
--color-auth: var(--auth);
--color-sidebar: var(--sidebar);
--color-surface: var(--surface);
--color-surface-elevated: var(--surface-elevated);
--color-surface-muted: var(--surface-muted);
--color-input: var(--input);
--color-foreground: var(--foreground);
--color-muted: var(--muted);
--color-border: var(--border);
--color-border-strong: var(--border-strong);
--color-primary: var(--primary);
--color-primary-foreground: var(--primary-foreground);
--color-primary-soft: var(--primary-soft);
--color-violet: var(--violet);
--color-violet-soft: var(--violet-soft);
--color-success: var(--success);
--color-success-soft: var(--success-soft);
--color-warning: var(--warning);
--color-warning-soft: var(--warning-soft);
--color-danger: var(--danger);
--color-danger-soft: var(--danger-soft);
}
:root {
color-scheme: light;
font-family: var(--font-sans);
font-synthesis: none;
text-rendering: optimizeLegibility;
--page: #f5f7fb;
--auth: #f4f7fc;
--sidebar: rgb(248 250 253 / 92%);
--surface: #ffffff;
--surface-elevated: #ffffff;
--surface-muted: #f1f4f8;
--input: #ffffff;
--foreground: #111827;
--muted: #667085;
--border: rgb(15 23 42 / 9%);
--border-strong: rgb(15 23 42 / 17%);
--primary: #1769e0;
--primary-foreground: #ffffff;
--primary-soft: #eaf2ff;
--violet: #7655d8;
--violet-soft: #f1edff;
--success: #138653;
--success-soft: #e8f8ef;
--warning: #a76808;
--warning-soft: #fff4d9;
--danger: #d13a4b;
--danger-soft: #fff0f1;
}
.dark {
color-scheme: dark;
--page: #0a0c10;
--auth: #090b10;
--sidebar: rgb(15 18 24 / 94%);
--surface: #12161d;
--surface-elevated: #171b23;
--surface-muted: #1b2029;
--input: #10141a;
--foreground: #f5f7fa;
--muted: #9ca6b5;
--border: rgb(255 255 255 / 9%);
--border-strong: rgb(255 255 255 / 16%);
--primary: #5b9cff;
--primary-foreground: #061124;
--primary-soft: rgb(91 156 255 / 14%);
--violet: #a78bfa;
--violet-soft: rgb(167 139 250 / 14%);
--success: #4ed69a;
--success-soft: rgb(78 214 154 / 13%);
--warning: #f5b94c;
--warning-soft: rgb(245 185 76 / 13%);
--danger: #ff6b7a;
--danger-soft: rgb(255 107 122 / 13%);
}
* {
box-sizing: border-box;
}
html {
min-width: 320px;
min-height: 100%;
background: var(--page);
}
body {
min-width: 320px;
min-height: 100vh;
margin: 0;
background: var(--page);
}
button,
input,
textarea,
select {
font: inherit;
}
button,
a,
select {
-webkit-tap-highlight-color: transparent;
}
button {
cursor: pointer;
}
button:disabled {
cursor: not-allowed;
}
::selection {
color: var(--primary-foreground);
background: var(--primary);
}
*:focus-visible {
outline: none;
}
.brand-symbol {
display: grid;
color: white;
background:
radial-gradient(circle at 25% 15%, rgb(255 255 255 / 44%), transparent 24%),
linear-gradient(145deg, #2e82ff 0%, #1769e0 46%, #7655d8 100%);
box-shadow:
0 12px 30px -14px rgb(23 105 224 / 75%),
inset 0 1px 0 rgb(255 255 255 / 25%);
font-weight: 850;
letter-spacing: -0.06em;
place-items: center;
}
.auth-orb {
position: absolute;
border-radius: 999px;
filter: blur(2px);
pointer-events: none;
}
.auth-orb--one {
top: -24rem;
left: -18rem;
width: 48rem;
height: 48rem;
background: radial-gradient(circle, rgb(91 156 255 / 18%), transparent 68%);
}
.auth-orb--two {
right: -20rem;
bottom: -24rem;
width: 52rem;
height: 52rem;
background: radial-gradient(circle, rgb(167 139 250 / 16%), transparent 68%);
}
.stat-glow {
position: absolute;
top: -5rem;
right: -5rem;
width: 10rem;
height: 10rem;
border-radius: 999px;
opacity: 0.13;
filter: blur(8px);
transition:
opacity 250ms ease,
transform 250ms ease;
}
.group:hover .stat-glow {
opacity: 0.2;
transform: scale(1.08);
}
.stat-glow--primary {
background: var(--primary);
}
.stat-glow--success {
background: var(--success);
}
.stat-glow--violet {
background: var(--violet);
}
.stat-glow--warning {
background: var(--warning);
}
.stat-icon {
display: grid;
width: 2.25rem;
height: 2.25rem;
border-radius: 0.75rem;
place-items: center;
}
.stat-icon--primary {
color: var(--primary);
background: var(--primary-soft);
}
.stat-icon--success {
color: var(--success);
background: var(--success-soft);
}
.stat-icon--violet {
color: var(--violet);
background: var(--violet-soft);
}
.stat-icon--warning {
color: var(--warning);
background: var(--warning-soft);
}
.osg-toast {
border-color: var(--border) !important;
border-radius: 1rem !important;
background: var(--surface-elevated) !important;
color: var(--foreground) !important;
box-shadow: 0 18px 50px rgb(15 23 42 / 18%) !important;
}
@keyframes page-in {
from {
opacity: 0;
transform: translateY(6px);
}
}
@keyframes card-in {
from {
opacity: 0;
transform: translateY(10px) scale(0.985);
}
}
.animate-page-in {
animation: page-in 260ms ease-out both;
}
.animate-card-in {
animation: card-in 320ms ease-out both;
}
.chart-grid-line {
stroke: var(--border);
stroke-width: 1;
stroke-dasharray: 3 5;
}
.chart-label {
fill: var(--muted);
font-size: 11px;
}
.chart-line {
fill: none;
stroke-linecap: round;
stroke-linejoin: round;
}
.chart-line--primary {
stroke: var(--primary);
stroke-width: 3;
}
.chart-line--violet {
stroke: var(--violet);
stroke-width: 2.5;
}
.chart-dot {
fill: var(--surface);
}
.chart-dot--primary {
stroke: var(--primary);
stroke-width: 3;
}
.chart-dot--violet {
stroke: var(--violet);
stroke-width: 2.5;
}
.chart-legend-dot {
width: 0.5rem;
height: 0.5rem;
border-radius: 999px;
}
.chart-legend-dot--primary {
background: var(--primary);
}
.chart-legend-dot--violet {
background: var(--violet);
}
.chart-legend-dot--success {
background: var(--success);
}
.chart-legend-dot--warning {
background: var(--warning);
}
.bar-progress,
.funnel-progress {
border: 0;
appearance: none;
}
.bar-progress::-webkit-progress-bar,
.funnel-progress::-webkit-progress-bar {
border-radius: 999px;
background: var(--surface-muted);
}
.bar-progress::-webkit-progress-value,
.funnel-progress::-webkit-progress-value {
border-radius: 999px;
}
.bar-progress--primary::-webkit-progress-value {
background: var(--primary);
}
.bar-progress--violet::-webkit-progress-value {
background: var(--violet);
}
.bar-progress--success::-webkit-progress-value {
background: var(--success);
}
.bar-progress--warning::-webkit-progress-value {
background: var(--warning);
}
.funnel-progress::-webkit-progress-value {
background: linear-gradient(90deg, var(--primary), var(--violet));
}
.bar-progress::-moz-progress-bar,
.funnel-progress::-moz-progress-bar {
border-radius: 999px;
}
.bar-progress--primary::-moz-progress-bar {
background: var(--primary);
}
.bar-progress--violet::-moz-progress-bar {
background: var(--violet);
}
.bar-progress--success::-moz-progress-bar {
background: var(--success);
}
.bar-progress--warning::-moz-progress-bar {
background: var(--warning);
}
.funnel-progress::-moz-progress-bar {
background: linear-gradient(90deg, var(--primary), var(--violet));
}
.radial-track,
.radial-value {
fill: none;
stroke-width: 11;
}
.radial-track {
stroke: var(--surface-muted);
}
.radial-value {
stroke-linecap: round;
}
.radial-value--primary {
stroke: var(--primary);
}
.radial-value--success {
stroke: var(--success);
}
.radial-value--violet {
stroke: var(--violet);
}
.radial-value--warning {
stroke: var(--warning);
}
.radial-label {
fill: var(--foreground);
font-size: 20px;
font-weight: 750;
letter-spacing: -0.04em;
}
.heatmap-cell {
display: block;
min-width: 4.25rem;
border-radius: 0.65rem;
padding: 0.65rem 0.5rem;
font-size: 0.75rem;
font-weight: 700;
font-variant-numeric: tabular-nums;
}
.heatmap-cell--high {
color: var(--success);
background: var(--success-soft);
}
.heatmap-cell--medium {
color: var(--warning);
background: var(--warning-soft);
}
.heatmap-cell--low {
color: var(--danger);
background: var(--danger-soft);
}
.heatmap-cell--unavailable {
color: var(--muted);
background: var(--surface-muted);
}
.heatmap-key {
width: 1rem;
height: 1rem;
border-radius: 0.3rem;
}
.heatmap-key--high {
background: var(--success-soft);
}
.heatmap-key--medium {
background: var(--warning-soft);
}
.heatmap-key--low {
background: var(--danger-soft);
}
.heatmap-key--unavailable {
background: var(--surface-muted);
}
@media (prefers-reduced-motion: reduce) {
*,
*::before,
*::after {
scroll-behavior: auto !important;
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
transition-duration: 0.01ms !important;
}
}
@media (prefers-contrast: more) {
:root {
--border: rgb(15 23 42 / 38%);
--border-strong: rgb(15 23 42 / 58%);
--muted: #414b5a;
}
.dark {
--border: rgb(255 255 255 / 40%);
--border-strong: rgb(255 255 255 / 65%);
--muted: #c0c7d1;
}
}
@media (forced-colors: active) {
.brand-symbol,
.stat-icon {
border: 1px solid ButtonText;
}
}