Files
purple-explorer/public/css/custom.scss
T
davide 88cba13e77 Redesign Purple theme with proper contrast and professional chart axes
Rebuilt the purple color palette from scratch using a 4-level luminance
scale (~3-5x jump per level: #06000f → #110028 → #1d0845 → #3a158a),
matching the approach of high-contrast Bootswatch dark themes (Darkly,
Cyborg). All contrast ratios are now WCAG-compliant: body text 16:1,
card header white text 8.5:1, primary button 5.5:1.

Chart axis improvements: Y-axis large numbers abbreviated (1.4M, 568K),
X-axis max 6 ticks at 30° rotation, Inter font throughout, dark-glass
tooltips, network_charts settings added to settings.json.tmpl with
transparent canvas background
2026-04-28 14:55:58 +02:00

217 lines
7.2 KiB
SCSS
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/* ============================================================
BitcoinPurple Explorer explorer-specific component styles
The base dark theme is in themes/purple/_bootswatch.scss.
This file adds only what Bootstrap + bootswatch don't cover.
============================================================ */
/* ── CSS vars (available to JS and inline styles) ────────────── */
:root {
--btcp-bg: #06000f;
--btcp-surface: #110028;
--btcp-card: #1d0845;
--btcp-header: #3a158a;
--btcp-border: #7c3aed;
--btcp-accent: #9333ea;
--btcp-bright: #a855f7;
--btcp-label: #c084fc;
--btcp-text: #ece0ff;
--btcp-text-dim: #9d6ae8;
--btcp-glow: 0 0 14px rgba(147,51,234,.5), 0 0 40px rgba(147,51,234,.18);
--btcp-glow-sm: 0 0 8px rgba(147,51,234,.4);
--radius: .55rem;
--radius-pill: 50rem;
}
/* ── Search bar ──────────────────────────────────────────────── */
.search-box-custom, #index-search, #search-row { padding: .75rem 0; }
.search-for,
#index-search .form-group {
width: 100%;
max-width: 680px;
margin: 0 auto;
position: relative;
}
/* Input field */
.search-for .form-control,
#index-search input.form-control {
background: var(--btcp-surface) !important;
border: 1.5px solid var(--btcp-border) !important;
border-right: none !important;
border-radius: var(--radius-pill) 0 0 var(--radius-pill) !important;
color: #fff !important;
padding: .6rem 1.25rem .6rem 2.6rem !important;
font-size: .95rem;
font-weight: 500;
height: 44px;
caret-color: var(--btcp-label);
transition: border-color .2s, box-shadow .2s;
}
.search-for .form-control:focus,
#index-search input.form-control:focus {
border-color: var(--btcp-accent) !important;
box-shadow: 0 0 0 3px rgba(147,51,234,.28) !important;
background: #16003a !important;
color: #fff !important;
outline: none;
}
.search-for .form-control::placeholder,
#index-search input.form-control::placeholder {
color: rgba(192,132,252,.7);
}
/* Search icon */
.search-for::before {
content: "";
position: absolute;
left: 1rem;
top: 50%;
transform: translateY(-50%);
color: var(--btcp-label);
font-size: 1.1rem;
pointer-events: none;
z-index: 5;
}
/* btn-success → purple (used as search button) */
.btn-success,
.btn-success:not(:disabled):not(.disabled) {
background: linear-gradient(135deg, var(--btcp-border), var(--btcp-accent)) !important;
border: none !important;
color: #fff !important;
font-weight: 600;
box-shadow: var(--btcp-glow-sm);
transition: all .2s ease;
}
.btn-success:hover,
.btn-success:focus {
background: linear-gradient(135deg, var(--btcp-accent), var(--btcp-bright)) !important;
box-shadow: var(--btcp-glow) !important;
transform: translateY(-1px);
}
.btn-success:active { transform: translateY(0); }
.search-for .btn-success,
#index-search .btn-success {
border-radius: 0 var(--radius-pill) var(--radius-pill) 0 !important;
padding: .6rem 1.5rem !important;
height: 44px;
font-size: .9rem;
}
/* ── Stat panels (header area) ───────────────────────────────── */
.panel-box,
.card.panel,
.stat-panel {
border: 1px solid rgba(124,58,237,.55) !important;
background: var(--btcp-card) !important;
border-radius: var(--radius) !important;
transition: transform .18s, box-shadow .18s;
}
.panel-box:hover,
.card.panel:hover {
transform: translateY(-2px);
box-shadow: var(--btcp-glow) !important;
}
/* Big numbers */
.panel-box .panel-value,
.card .display-4,
.card h3, .card .h3 {
color: #fff !important;
font-weight: 700;
}
/* Labels */
.panel-box .panel-label,
.card .card-title,
.card small {
color: var(--btcp-label) !important;
font-size: .73rem;
text-transform: uppercase;
letter-spacing: .09em;
font-weight: 600;
}
/* ── Text helpers ────────────────────────────────────────────── */
body { color: var(--btcp-text) !important; }
.card-body, .panel-body { color: var(--btcp-text) !important; }
p, li, span, div, td, th, label { color: inherit; }
.text-muted, small, .small {
color: var(--btcp-text-dim) !important;
opacity: 1 !important;
}
/* ── Hash / monospace links in tables ────────────────────────── */
.table td a {
font-family: "SF Mono", "Fira Code", monospace;
font-size: .8rem;
}
/* ── Status badges ───────────────────────────────────────────── */
.text-success { color: #4ade80 !important; }
.text-danger { color: #f87171 !important; }
.text-warning { color: #fbbf24 !important; }
/* ── Loading bar ─────────────────────────────────────────────── */
#loading-bar, .loading-bar, #nprogress .bar {
background: linear-gradient(90deg, var(--btcp-border), var(--btcp-label)) !important;
box-shadow: 0 0 8px var(--btcp-accent);
}
/* ── Chart canvas subtle glow ────────────────────────────────── */
canvas {
filter: drop-shadow(0 0 4px rgba(147,51,234,.12));
}
/* ── Network chart card overrides ────────────────────────────── */
#nethashChartParent,
#difficultyChartParent {
.card { background: var(--btcp-card) !important; overflow: hidden; }
.card-header {
background: var(--btcp-header) !important;
border-bottom: 2px solid var(--btcp-border) !important;
padding: .6rem 1rem !important;
display: flex;
align-items: center;
gap: .5rem;
&::before {
content: '';
display: inline-block;
width: 3px;
height: 14px;
border-radius: 2px;
background: linear-gradient(180deg, var(--btcp-label), var(--btcp-accent));
flex-shrink: 0;
}
strong {
color: #fff !important;
font-size: .78rem;
letter-spacing: .08em;
text-transform: uppercase;
font-weight: 700;
}
}
.card-body { padding: .75rem !important; }
canvas { display: block; border-radius: .3rem; }
}
/* ── Scrollbar ───────────────────────────────────────────────── */
* { scrollbar-width: thin; scrollbar-color: var(--btcp-border) var(--btcp-bg); }
::-webkit-scrollbar { width: 5px; height: 5px; }
::-webkit-scrollbar-track { background: var(--btcp-bg); }
::-webkit-scrollbar-thumb { background: var(--btcp-border); border-radius: 99px; }
::-webkit-scrollbar-thumb:hover { background: var(--btcp-accent); }
/* ── Tooltip ─────────────────────────────────────────────────── */
.tooltip-inner {
background: var(--btcp-card) !important;
border: 1px solid var(--btcp-border);
color: var(--btcp-text);
font-size: .8rem;
}