vacuum-card
Version:
Vacuum cleaner card for Home Assistant Lovelace UI
278 lines (243 loc) • 4.83 kB
CSS
:host {
--vc-background: var(
--ha-card-background,
var(--card-background-color, white)
);
--vc-primary-text-color: var(--primary-text-color);
--vc-secondary-text-color: var(--secondary-text-color);
--vc-icon-color: var(--secondary-text-color);
--vc-toolbar-background: var(--vc-background);
--vc-toolbar-text-color: var(--secondary-text-color);
--vc-toolbar-icon-color: var(--secondary-text-color);
--vc-divider-color: var(--entities-divider-color, var(--divider-color));
--vc-spacing: 10px;
display: flex;
flex: 1;
flex-direction: column;
}
ha-card {
flex-direction: column;
flex: 1;
position: relative;
overflow: hidden;
}
.preview {
background: var(--vc-background);
position: relative;
text-align: center;
&.not-available {
filter: grayscale(1);
}
}
.header {
display: flex;
justify-content: space-between;
}
.tips {
display: flex;
gap: var(--vc-spacing);
flex-grow: 1;
flex-wrap: wrap;
padding: var(--vc-spacing);
& .tip {
cursor: pointer;
}
}
.map {
max-width: 95%;
image-rendering: crisp-edges;
cursor: pointer;
}
@keyframes cleaning {
0% {
transform: rotate(0) translate(0);
}
5% {
transform: rotate(0) translate(0, -10px);
}
10% {
transform: rotate(0) translate(0, 5px);
}
15% {
transform: rotate(0) translate(0);
}
/* Turn left */
20% {
transform: rotate(30deg) translate(0);
}
25% {
transform: rotate(30deg) translate(0, -10px);
}
30% {
transform: rotate(30deg) translate(0, 5px);
}
35% {
transform: rotate(30deg) translate(0);
}
40% {
transform: rotate(0) translate(0);
}
/* Turn right */
45% {
transform: rotate(-30deg) translate(0);
}
50% {
transform: rotate(-30deg) translate(0, -10px);
}
55% {
transform: rotate(-30deg) translate(0, 5px);
}
60% {
transform: rotate(-30deg) translate(0);
}
70% {
transform: rotate(0deg) translate(0);
}
/* Staying still */
100% {
transform: rotate(0deg);
}
}
@keyframes returning {
0% {
transform: rotate(0);
}
25% {
transform: rotate(10deg);
}
50% {
transform: rotate(0);
}
75% {
transform: rotate(-10deg);
}
100% {
transform: rotate(0);
}
}
.vacuum {
display: block;
max-width: 90%;
max-height: 200px;
image-rendering: crisp-edges;
margin: var(--vc-spacing) auto;
cursor: pointer;
filter: brightness(0.9);
}
.vacuum.on,
.vacuum.cleaning,
.vacuum.auto,
.vacuum.spot,
.vacuum.edge,
.vacuum.single_room {
animation: cleaning 5s linear infinite;
}
.vacuum.returning {
animation: returning 2s linear infinite;
}
.vacuum.paused {
opacity: 100%;
}
.vacuum.docked {
opacity: 50%;
}
.fill-gap {
flex-grow: 1;
}
.more-info ha-icon {
display: flex;
}
.status {
display: flex;
align-items: center;
justify-content: center;
direction: ltr;
}
.status-text {
color: var(--vc-secondary-text-color);
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
margin-left: calc(28px + var(--vc-spacing)); /* size + margin of spinner */
}
.status mwc-circular-progress {
--mdc-theme-primary: var(--vc-secondary-text-color) ;
margin-left: var(--vc-spacing);
}
.vacuum-name {
text-align: center;
font-weight: bold;
color: var(--vc-primary-text-color);
font-size: 16px;
}
.not-available .offline {
text-align: center;
color: var(--vc-primary-text-color);
font-size: 16px;
}
.metadata {
margin: var(--vc-spacing) auto;
}
.stats {
border-top: 1px solid var(--vc-divider-color);
display: flex;
flex-direction: row;
justify-content: space-evenly;
color: var(--vc-secondary-text-color);
}
.stats-block {
cursor: pointer;
padding: var(--vc-spacing) 0px;
text-align: center;
border-right: 1px solid var(--vc-divider-color);
flex-grow: 1;
&:last-of-type {
border-right: 0px;
}
}
.stats-value {
font-size: 20px;
color: var(--vc-primary-text-color);
}
ha-icon {
color: var(--vc-icon-color);
}
.toolbar {
background: var(--vc-toolbar-background);
min-height: 30px;
display: flex;
flex-direction: row;
flex-flow: row wrap;
flex-wrap: wrap;
justify-content: space-evenly;
padding: 5px;
border-top: 1px solid var(--vc-divider-color);
}
.toolbar ha-icon-button {
color: var(--vc-toolbar-text-color);
flex-direction: column;
width: 44px;
height: 44px;
--mdc-icon-button-size: 44px;
}
.toolbar paper-button {
color: var(--vc-toolbar-text-color);
display: flex;
align-items: center;
margin-right: 10px;
padding: 15px 10px;
cursor: pointer;
& ha-icon {
margin-right: 5px;
color: var(--vc-toolbar-icon-color);
}
}
.toolbar ha-icon {
color: var(--vc-toolbar-icon-color);
display: flex;
}
.icon-title {
display: inline-block;
vertical-align: middle;
padding: 0 3px;
}