:root {
--charts-fg: rgb(17 24 39);
--charts-fg-muted: rgb(107 114 128);
--charts-fg-faint: rgb(156 163 175);
--charts-grid-color: rgba(17, 24, 39, 0.06);
--charts-bg: transparent;
--charts-series-opened: rgb(43, 127, 255);
--charts-series-opened-soft: rgba(142, 197, 255, 0.55);
--charts-series-closed: rgb(34, 197, 94);
--charts-series-closed-soft: rgba(134, 239, 172, 0.55);
}
@media (prefers-color-scheme: dark) {
:root {
--charts-fg: rgb(229 231 235);
--charts-fg-muted: rgb(156 163 175);
--charts-fg-faint: rgb(107 114 128);
--charts-grid-color: rgba(229, 231, 235, 0.08);
}
}
.charts-root {
display: flex;
flex-direction: column;
width: 100%;
height: var(--charts-height, 320px);
color: var(--charts-fg);
background: var(--charts-bg);
font-family: inherit;
font-size: 12px;
position: relative;
}
.charts-empty {
display: flex;
align-items: center;
justify-content: center;
flex: 1;
color: var(--charts-fg-faint);
font-style: italic;
}
.charts-legend {
display: flex;
flex-wrap: wrap;
align-items: center;
column-gap: 28px;
row-gap: 8px;
padding: 6px 8px 14px 8px;
color: var(--charts-fg-muted);
}
.charts-legend-item {
display: inline-flex;
align-items: center;
gap: 8px;
}
.charts-legend-item.is-hidden {
opacity: 0.4;
}
.charts-legend-item.is-hidden .charts-legend-name {
text-decoration: line-through;
}
.charts-legend-swatch {
position: relative;
display: inline-flex;
align-items: center;
cursor: pointer;
}
.charts-legend-name {
cursor: pointer;
}
.charts-legend-dot {
display: inline-block;
width: 10px;
height: 10px;
border-radius: 999px;
background: currentColor;
}
.charts-legend-name {
color: var(--charts-fg);
font-size: 12.5px;
}
.charts-legend-item {
user-select: none;
}
.charts-legend-swatch:hover .charts-legend-dot {
transform: scale(1.15);
transition: transform 120ms ease-out;
}
.charts-legend-color-input {
position: absolute;
left: 0;
top: 50%;
transform: translateY(-50%);
width: 10px;
height: 10px;
padding: 0;
margin: 0;
border: none;
outline: none;
background: transparent;
opacity: 0;
cursor: pointer;
-webkit-appearance: none;
appearance: none;
}
.charts-legend-color-input::-webkit-color-swatch-wrapper { padding: 0; }
.charts-legend-color-input::-webkit-color-swatch { border: none; }
.charts-plot {
display: grid;
grid-template-columns: var(--charts-y-gutter, 52px) 1fr;
flex: 1;
min-height: 0;
position: relative;
}
.charts-y-axis {
display: flex;
flex-direction: column;
width: 100%;
}
.charts-y-axis-scale {
position: relative;
flex: 1 1 0;
min-height: 0;
}
.charts-y-axis::after {
content: "";
display: block;
flex: 0 0 26px;
}
.charts-y-tick {
position: absolute;
right: 8px;
transform: translateY(-50%);
color: var(--charts-fg-muted);
font-size: 11px;
font-variant-numeric: tabular-nums;
white-space: nowrap;
}
.charts-plot-area {
position: relative;
display: flex;
flex-direction: column;
min-width: 0;
min-height: 0;
}
.charts-svg {
flex: 1 1 0;
min-height: 0;
width: 100%;
display: block;
overflow: visible;
}
.charts-x-axis {
position: relative;
height: 22px;
margin-top: 4px;
}
.charts-x-tick {
position: absolute;
transform: translateX(-50%);
color: var(--charts-fg-muted);
font-size: 11px;
white-space: nowrap;
}
.charts-grid-line {
stroke: var(--charts-grid-color);
stroke-width: 1;
vector-effect: non-scaling-stroke;
}
@keyframes charts-series-rise {
from {
transform: scaleY(0);
opacity: 0;
}
to {
transform: scaleY(1);
opacity: 1;
}
}
@keyframes charts-fade-in {
from { opacity: 0; }
to { opacity: 1; }
}
.charts-series-paths {
transform-origin: 0 100%;
animation: charts-series-rise 650ms cubic-bezier(0.22, 1, 0.36, 1) both;
}
.charts-series-paths:nth-child(2) { animation-delay: 80ms; }
.charts-series-paths:nth-child(3) { animation-delay: 160ms; }
.charts-y-axis,
.charts-x-axis,
.charts-grid {
animation: charts-fade-in 500ms ease-out both;
animation-delay: 100ms;
}
.charts-legend {
animation: charts-fade-in 400ms ease-out both;
}
@media (prefers-reduced-motion: reduce) {
.charts-series-paths,
.charts-y-axis,
.charts-x-axis,
.charts-grid,
.charts-legend {
animation: none;
}
}
.charts-area {
stroke: none;
opacity: 1;
transition: opacity 180ms ease-out;
}
.charts-line {
stroke-width: 2;
vector-effect: non-scaling-stroke;
fill: none;
transition: stroke-width 180ms ease-out;
}
.charts-crosshair-overlay {
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 26px;
pointer-events: none;
}
.charts-crosshair {
position: absolute;
top: 0;
bottom: 0;
width: 0;
border-left: 1px dashed var(--charts-fg-faint);
opacity: 0.85;
}
.charts-crosshair-pinned {
border-left-width: 1.5px;
border-left-color: var(--charts-fg-muted);
opacity: 0.95;
}
.charts-dots-overlay {
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 26px;
pointer-events: none;
}
.charts-dot {
position: absolute;
width: 8px;
height: 8px;
border-radius: 50%;
transform: translate(-50%, -50%);
pointer-events: none;
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.22);
}
.charts-dot.charts-series-opened {
background: var(--charts-series-opened);
}
.charts-dot.charts-series-closed {
background: var(--charts-series-closed);
}
.charts-tooltip {
position: absolute;
pointer-events: none;
z-index: 5;
min-width: 200px;
padding: 10px 12px;
background: rgba(20, 22, 28, 0.92);
color: rgb(229 231 235);
border-radius: 10px;
box-shadow: 0 8px 22px rgba(0, 0, 0, 0.22);
font-size: 12px;
line-height: 1.5;
backdrop-filter: blur(8px);
-webkit-backdrop-filter: blur(8px);
animation: charts-fade-in 140ms ease-out both;
}
@media (prefers-color-scheme: light) {
.charts-tooltip {
background: rgba(255, 255, 255, 0.96);
color: rgb(17 24 39);
box-shadow: 0 8px 22px rgba(15, 23, 42, 0.16);
}
}
.charts-tooltip-pinned {
border: 1px solid var(--charts-fg-faint);
min-width: 0;
animation: none;
}
.charts-tooltip-card {
display: flex;
flex-direction: column;
gap: 2px;
}
.charts-tooltip-date {
font-weight: 600;
margin-bottom: 4px;
color: inherit;
}
.charts-tooltip-row {
display: grid;
grid-template-columns: auto 1fr auto;
align-items: center;
gap: 6px;
}
.charts-tooltip-row.sub {
padding-left: 16px;
opacity: 0.75;
font-size: 11px;
}
.charts-tooltip-dot {
display: inline-block;
width: 8px;
height: 8px;
border-radius: 999px;
background: currentColor;
}
.charts-tooltip-dot.charts-series-opened {
color: var(--charts-series-opened);
}
.charts-tooltip-dot.charts-series-closed {
color: var(--charts-series-closed);
}
.charts-tooltip-label {
color: inherit;
}
.charts-tooltip-value {
font-variant-numeric: tabular-nums;
font-weight: 500;
}
.charts-line.charts-series-opened {
stroke: var(--charts-series-opened);
}
.charts-line.charts-series-closed {
stroke: var(--charts-series-closed);
}
.charts-legend-item:has(.charts-series-opened) .charts-legend-dot {
color: var(--charts-series-opened);
}
.charts-legend-item:has(.charts-series-closed) .charts-legend-dot {
color: var(--charts-series-closed);
}
.charts-gradient.charts-series-opened .charts-gradient-top {
stop-color: var(--charts-series-opened-soft);
stop-opacity: 0.85;
}
.charts-gradient.charts-series-opened .charts-gradient-bottom {
stop-color: var(--charts-series-opened-soft);
stop-opacity: 0.05;
}
.charts-gradient.charts-series-closed .charts-gradient-top {
stop-color: var(--charts-series-closed-soft);
stop-opacity: 0.85;
}
.charts-gradient.charts-series-closed .charts-gradient-bottom {
stop-color: var(--charts-series-closed-soft);
stop-opacity: 0.05;
}
.charts-zoom-band {
fill: rgba(66, 98, 255, 0.12);
stroke: rgba(66, 98, 255, 0.55);
stroke-width: 1;
stroke-dasharray: 3 2;
pointer-events: none;
vector-effect: non-scaling-stroke;
}
@media (prefers-color-scheme: dark) {
.charts-zoom-band {
fill: rgba(120, 150, 255, 0.18);
stroke: rgba(120, 150, 255, 0.7);
}
}
.charts-zoom-reset {
position: absolute;
top: 8px;
right: 8px;
display: inline-flex;
align-items: center;
gap: 4px;
padding: 4px 10px;
font: inherit;
font-size: 11px;
font-weight: 500;
color: var(--charts-fg);
background: rgba(255, 255, 255, 0.88);
border: 1px solid rgba(17, 24, 39, 0.12);
border-radius: 999px;
box-shadow: 0 1px 2px rgba(17, 24, 39, 0.06);
cursor: pointer;
backdrop-filter: blur(8px);
-webkit-backdrop-filter: blur(8px);
transition: background-color 120ms ease, box-shadow 120ms ease;
}
.charts-zoom-reset:hover {
background: rgba(255, 255, 255, 1);
box-shadow: 0 2px 6px rgba(17, 24, 39, 0.1);
}
.charts-zoom-reset:focus-visible {
outline: 2px solid var(--charts-series-opened);
outline-offset: 2px;
}
@media (prefers-color-scheme: dark) {
.charts-zoom-reset {
background: rgba(31, 41, 55, 0.85);
border-color: rgba(229, 231, 235, 0.18);
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.35);
}
.charts-zoom-reset:hover {
background: rgba(31, 41, 55, 1);
}
}