Files
sendou.ink/app/features/availability/components/ScheduleHeatmap.module.css
2026-09-05 13:45:26 +03:00

209 lines
3.7 KiB
CSS

.heatmap {
/* how many are free at once, as steps between the track and the strongest "can play" green */
--heat-1: color-mix(
in oklab,
var(--color-success-high) 20%,
var(--color-bg-high)
);
--heat-2: color-mix(
in oklab,
var(--color-success-high) 40%,
var(--color-bg-high)
);
--heat-3: color-mix(
in oklab,
var(--color-success-high) 60%,
var(--color-bg-high)
);
--heat-4: color-mix(
in oklab,
var(--color-success-high) 80%,
var(--color-bg-high)
);
--heat-5: var(--color-success-high);
}
.chips {
display: flex;
flex-wrap: wrap;
gap: var(--s-1-5);
}
/* the chip-radio look, as a multi-select: solid fills, no borders */
.chip {
display: inline-flex;
align-items: center;
gap: var(--s-1-5);
padding: 0 var(--s-2) 0 var(--s-1);
height: var(--selector-size);
background-color: var(--color-bg-higher);
border: none;
border-radius: var(--radius-selector);
font-size: var(--font-xs);
font-weight: var(--weight-semi);
color: var(--color-text);
cursor: pointer;
transition: background-color 0.15s;
&[aria-pressed="true"] {
background-color: var(--color-text-accent);
color: var(--color-text-inverse);
}
&:focus-visible {
outline: var(--focus-ring);
outline-offset: 2px;
}
}
.chipUnknown {
opacity: 0.7;
}
.dotSlot {
display: inline-flex;
width: 0.6rem;
flex-shrink: 0;
}
.cellRow {
display: grid;
grid-template-columns: repeat(var(--cells), 1fr);
gap: 2px;
}
.cell {
height: 1.5rem;
border-radius: 3px;
background-color: var(--color-bg-high);
&:hover {
outline: 2px solid var(--color-border-high);
outline-offset: 1px;
}
}
.count1 {
background-color: var(--heat-1);
}
.count2 {
background-color: var(--heat-2);
}
.count3 {
background-color: var(--heat-3);
}
.count4 {
background-color: var(--heat-4);
}
.count5 {
background-color: var(--heat-5);
}
/* framed like the popover element: page background inside the standard border */
.tooltip {
position: fixed;
z-index: 10;
transform: translate(-50%, calc(-100% - 6px));
max-width: 16rem;
padding: var(--s-2);
background-color: var(--color-bg);
border: var(--border-style);
border-radius: var(--radius-box);
font-size: var(--font-xs);
font-weight: var(--weight-semi);
pointer-events: none;
&.tooltipBelow {
transform: translate(-50%, 6px);
}
}
.tooltipTime {
font-weight: var(--weight-semi);
}
.tooltipCount {
color: var(--color-text-high);
margin-block-end: var(--s-1);
}
.tooltipMembers {
display: flex;
flex-direction: column;
gap: var(--s-0-5);
margin: 0;
padding: 0;
list-style: none;
}
.tooltipDot {
/* whole pixels: a fractional size rounds width and height differently and the circle turns oval */
width: 8px;
height: 8px;
border-radius: 50%;
background-color: var(--color-success);
flex-shrink: 0;
&.tooltipDotUnknown {
background-color: transparent;
border: 1px dashed currentColor;
}
}
.tooltipMember {
display: flex;
align-items: center;
gap: var(--s-1-5);
white-space: nowrap;
&.tooltipMemberOff {
color: var(--color-text-high);
& .tooltipDot {
background-color: transparent;
border: 1px solid currentColor;
}
}
}
.listChip {
display: inline-flex;
align-items: center;
gap: var(--s-1);
padding: var(--s-0-5) var(--s-2);
background-color: var(--color-bg-high);
border-radius: var(--radius-full);
font-size: var(--font-xs);
color: var(--color-text);
}
.legend {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: var(--s-2);
font-size: var(--font-3xs);
color: var(--color-text-high);
}
.legendItem {
display: flex;
align-items: center;
gap: var(--s-1);
}
.legendSwatch {
width: 14px;
height: 10px;
border-radius: 2px;
}
.unreported {
font-size: var(--font-2xs);
color: var(--color-text-high);
}