0b4acb5978
Turn operational, product, and referral metrics into accessible charts so trends, funnels, retention, and channel quality are faster to interpret.
511 lines
9.3 KiB
CSS
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;
|
|
}
|
|
}
|