5ccd7279d2
The spinner arrows clash with the dark glass UI. One base-layer CSS rule removes them from every type=number input (admin settings, signals filters, data cleanup, etc.) — values are typed, and type=number still gives the mobile numeric keypad and validation. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
158 lines
4.4 KiB
CSS
158 lines
4.4 KiB
CSS
@tailwind base;
|
|
@tailwind components;
|
|
@tailwind utilities;
|
|
|
|
@layer base {
|
|
body {
|
|
background: #0e120f;
|
|
min-height: 100vh;
|
|
}
|
|
|
|
h1, h2, h3 {
|
|
font-family: 'Bricolage Grotesque', system-ui, sans-serif;
|
|
}
|
|
|
|
/* Number inputs: drop the native spinner arrows app-wide — they don't fit the
|
|
dark glass UI. Values are typed; type=number still gives the numeric keypad
|
|
on mobile and browser validation. */
|
|
input[type='number']::-webkit-outer-spin-button,
|
|
input[type='number']::-webkit-inner-spin-button {
|
|
-webkit-appearance: none;
|
|
margin: 0;
|
|
}
|
|
input[type='number'] {
|
|
-moz-appearance: textfield;
|
|
appearance: textfield;
|
|
}
|
|
|
|
/* Atmosphere: faint graph-paper grid + citron signal glow + film grain */
|
|
#root {
|
|
position: relative;
|
|
min-height: 100vh;
|
|
}
|
|
|
|
#root::before {
|
|
content: '';
|
|
position: fixed;
|
|
inset: 0;
|
|
z-index: -2;
|
|
background:
|
|
radial-gradient(ellipse 70% 50% at 15% 0%, rgba(196, 232, 46, 0.06) 0%, transparent 55%),
|
|
radial-gradient(ellipse 50% 40% at 90% 90%, rgba(52, 211, 153, 0.04) 0%, transparent 50%),
|
|
linear-gradient(rgba(223, 242, 178, 0.025) 1px, transparent 1px),
|
|
linear-gradient(90deg, rgba(223, 242, 178, 0.025) 1px, transparent 1px);
|
|
background-size: 100% 100%, 100% 100%, 48px 48px, 48px 48px;
|
|
pointer-events: none;
|
|
}
|
|
|
|
/* Film grain — keeps large dark areas from feeling flat */
|
|
#root::after {
|
|
content: '';
|
|
position: fixed;
|
|
inset: 0;
|
|
z-index: -1;
|
|
opacity: 0.5;
|
|
background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix type='matrix' values='0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.04 0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
|
|
pointer-events: none;
|
|
}
|
|
}
|
|
|
|
@layer components {
|
|
/* Panel — the core building block (kept class names so all components reskin) */
|
|
.glass {
|
|
background: rgba(238, 240, 233, 0.035);
|
|
backdrop-filter: blur(12px);
|
|
-webkit-backdrop-filter: blur(12px);
|
|
border: 1px solid rgba(223, 242, 178, 0.09);
|
|
border-radius: 0.875rem;
|
|
}
|
|
|
|
.glass-sm {
|
|
background: rgba(238, 240, 233, 0.028);
|
|
backdrop-filter: blur(10px);
|
|
-webkit-backdrop-filter: blur(10px);
|
|
border: 1px solid rgba(223, 242, 178, 0.07);
|
|
border-radius: 0.625rem;
|
|
}
|
|
|
|
.glass-hover {
|
|
transition: all 0.2s ease;
|
|
}
|
|
.glass-hover:hover {
|
|
background: rgba(238, 240, 233, 0.06);
|
|
border-color: rgba(214, 242, 92, 0.22);
|
|
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.25);
|
|
}
|
|
|
|
/* Gradient text — reserved for the brand wordmark only */
|
|
.text-gradient {
|
|
background: linear-gradient(120deg, #d6f25c, #6ee7b7);
|
|
-webkit-background-clip: text;
|
|
-webkit-text-fill-color: transparent;
|
|
background-clip: text;
|
|
}
|
|
|
|
/* Primary button — luminous citron with ink text. The signature element. */
|
|
.btn-primary {
|
|
background: #c3e82e;
|
|
color: #16190a;
|
|
border: 1px solid rgba(214, 242, 92, 0.5);
|
|
border-radius: 0.5rem;
|
|
font-weight: 600;
|
|
transition: all 0.2s ease;
|
|
}
|
|
.btn-primary:hover:not(:disabled) {
|
|
background: #d6f25c;
|
|
box-shadow: 0 0 20px rgba(196, 232, 46, 0.35);
|
|
}
|
|
|
|
/* Inputs */
|
|
.input-glass {
|
|
background: rgba(238, 240, 233, 0.04);
|
|
border: 1px solid rgba(223, 242, 178, 0.12);
|
|
border-radius: 0.5rem;
|
|
color: #eef0e9;
|
|
transition: all 0.2s ease;
|
|
}
|
|
.input-glass::placeholder {
|
|
color: rgba(149, 157, 135, 0.55);
|
|
}
|
|
.input-glass:focus {
|
|
outline: none;
|
|
border-color: rgba(214, 242, 92, 0.5);
|
|
box-shadow: 0 0 0 3px rgba(196, 232, 46, 0.12);
|
|
background: rgba(238, 240, 233, 0.06);
|
|
}
|
|
|
|
/* Numbers — every metric reads in tabular mono */
|
|
.num {
|
|
font-family: 'IBM Plex Mono', ui-monospace, monospace;
|
|
font-variant-numeric: tabular-nums;
|
|
}
|
|
|
|
/* Section index label, e.g. "01 / Watchlist" */
|
|
.section-index {
|
|
font-family: 'IBM Plex Mono', ui-monospace, monospace;
|
|
font-size: 0.65rem;
|
|
letter-spacing: 0.18em;
|
|
color: #6e7562;
|
|
text-transform: uppercase;
|
|
}
|
|
|
|
/* Scrollbar styling */
|
|
::-webkit-scrollbar {
|
|
width: 6px;
|
|
height: 6px;
|
|
}
|
|
::-webkit-scrollbar-track {
|
|
background: transparent;
|
|
}
|
|
::-webkit-scrollbar-thumb {
|
|
background: rgba(223, 242, 178, 0.12);
|
|
border-radius: 3px;
|
|
}
|
|
::-webkit-scrollbar-thumb:hover {
|
|
background: rgba(223, 242, 178, 0.22);
|
|
}
|
|
}
|