Or you create a custom card.
Ive alread made it. I just dont find/know the service call to open the voice assistant.
Doesnt work on my end. I can see the card loading something and an animation. But its way too big. fill the complete card in white color.
got it working. Failure on my end
I used the standard button card. You can then select assist from the gui interface. Select the specofic assistant.
I then switched to code view and copied it.
Not sure if that helps you work out something.
Where do i need to paste that yaml code in the theme.yaml?
Of could you update your github ?
By the way. You do not need to add the scaler, width and color to the theme. You can apply it in button card.
I ve just noticed the mistake. Usennn
:host {
--assistant-width: 50;
--assistant-scaler: calc(var(--assistant-width); / 200);
--assistant-color: white;
}
so here the complete code.
type: custom:button-card
show_name: false
show_state: false
show_icon: false
show_label: false
tap_action:
action: none
styles:
grid:
- grid-template-areas: '"."'
- grid-template-columns: min-content
- grid-template-rows: min-content
card:
- padding: 32px
- background: var(--background-color)
- height: max-content
custom_fields:
custom_html: |
[[[
return `
<div class="assistant-container">
<div id="assistant">
<div class="assistant-dot"></div>
<div class="assistant-dot"></div>
<div class="assistant-dot"></div>
</div>
<div id="assistant-corner"></div>
<div id="assistant-antenna">
<div id="assistant-beam"></div>
<div id="assistant-beam-pulsar"></div>
</div>
</div>
`
]]]
extra_styles: |
:host {
--assistant-width: 50;
--assistant-scaler: calc(var(--assistant-width) / 200);
--assistant-color: white;
}
.assistant-container {
margin: auto;
position: absolute;
bottom: 0;
left: 0;
top: 0;
right: 0;
height: calc(200px * var(--assistant-scaler));
width: calc(200px * var(--assistant-scaler));
animation: up-down 7.5s infinite ease-in-out;
background-color: var(--background-color);
}
.assistant-container #assistant {
margin: auto;
position: absolute;
bottom: 0;
left: 0;
top: 0;
right: 0;
width: calc(150px * var(--assistant-scaler));
height: calc(85px * var(--assistant-scaler));
border: calc(12px * var(--assistant-scaler)) solid var(--assistant-color);
border-radius: 5rem;
}
.assistant-container #assistant-corner {
margin: auto;
position: absolute;
bottom: 0;
left: 0;
top: 0;
right: 0;
top: calc(105px * var(--assistant-scaler));
left: calc(-65px * var(--assistant-scaler));
width: 0;
height: 0;
border-left: calc(20px * var(--assistant-scaler)) solid transparent;
border-right: calc(20px * var(--assistant-scaler)) solid transparent;
border-top: calc(25px * var(--assistant-scaler)) solid var(--assistant-color);
transform: rotate(140deg);
}
.assistant-container #assistant-antenna {
margin: auto;
position: absolute;
bottom: 0;
left: 0;
top: 0;
right: 0;
top: calc(-125px * var(--assistant-scaler));
height: calc(20px * var(--assistant-scaler));
width: calc(10px * var(--assistant-scaler));
background-color: var(--assistant-color);
animation: antenna-appear 7.5s infinite ease-in-out;
}
.assistant-container #assistant-antenna #assistant-beam {
position: absolute;
top: calc(-12.5px * var(--assistant-scaler));
left: calc(-5px * var(--assistant-scaler));
height: calc(20px * var(--assistant-scaler));
width: calc(20px * var(--assistant-scaler));
border-radius: 50%;
background-color: var(--assistant-color);
animation: beam-appear 7.5s infinite ease-in-out;
}
.assistant-container #assistant-antenna #assistant-beam-pulsar {
position: absolute;
top: calc(-12.5px * var(--assistant-scaler));
left: calc(-5px * var(--assistant-scaler));
height: calc(20px * var(--assistant-scaler));
width: calc(20px * var(--assistant-scaler));
border-radius: 50%;
background-color: var(--assistant-color);
animation: beam-pulsar-appear 7.5s infinite ease-in-out;
}
.assistant-container .assistant-dot {
height: calc(17.5px * var(--assistant-scaler));
width: calc(17.5px * var(--assistant-scaler));
margin: auto;
position: absolute;
bottom: 0;
left: 0;
top: 0;
right: 0;
left: calc(-65px * var(--assistant-scaler));
background-color: var(--assistant-color);
border-radius: 50%;
animation: pulse-outer 7.5s infinite ease-in-out;
}
.assistant-container .assistant-dot:nth-child(2) {
left: 0;
animation: pulse-inner 7.5s infinite ease-in-out;
animation-delay: 0.2s;
}
.assistant-container .assistant-dot:nth-child(3) {
left: calc(65px * var(--assistant-scaler));
animation: pulse-outer 7.5s infinite ease-in-out;
animation-delay: 0.4s;
}
@keyframes pulse-inner {
0% { transform: scale(1); }
7.5% { transform: scale(1.5); }
15% { transform: scale(1); }
22.5% { transform: scale(1.5); }
30% { transform: scale(1); }
37.5% { transform: scale(1.5); }
45% { top: 0; transform: scale(1); height: calc(17.5px * var(--assistant-scaler)); border-bottom-left-radius: 50%; border-bottom-right-radius: 50%; transform: rotate(-370deg); }
50% { top: calc(22.5px * var(--assistant-scaler)); height: calc(10px * var(--assistant-scaler)); border-top-left-radius: 50%; border-top-right-radius: 50%; border-bottom-left-radius: 3rem; border-bottom-right-radius: 3rem; transform: rotate(10deg); }
55% { transform: rotate(-10deg); }
60% { transform: rotate(10deg); }
65% { transform: rotate(-10deg); }
85% { top: calc(22.5px * var(--assistant-scaler)); height: calc(10px * var(--assistant-scaler)); border-top-left-radius: 50%; border-top-right-radius: 50%; border-bottom-left-radius: 3rem; border-bottom-right-radius: 3rem; transform: rotate(0deg); }
92.5% { top: calc(22.5px * var(--assistant-scaler)); height: calc(10px * var(--assistant-scaler)); border-top-left-radius: 50%; border-top-right-radius: 50%; border-bottom-left-radius: 2.5rem; border-bottom-right-radius: 2.5rem; transform: rotate(0deg); }
100% { top: 0; height: calc(17.5px * var(--assistant-scaler)); border-radius: 50%; transform: rotate(-360deg); }
}
@keyframes pulse-outer {
0% { transform: scale(1); }
7.5% { transform: scale(1.5); }
15% { transform: scale(1); }
22.5% { transform: scale(1.5); }
30% { transform: scale(1); }
37.5% {transform: scale(1.5); }
45% { transform: scale(1); height: calc(17.5px * var(--assistant-scaler)); }
55% { tranform: scale(1); height: calc(5px * var(--assistant-scaler)); }
60% { height: calc(17.5px * var(--assistant-scaler)); }
75% { height: calc(17.5px * var(--assistant-scaler)); }
80% { tranform: scale(1); height: calc(5px * var(--assistant-scaler)); }
85% { height: calc(17.5px * var(--assistant-scaler)); }
100% { height: calc(17.5px * var(--assistant-scaler)); }
}
@keyframes antenna-appear {
0% { visibility: hidden; top: calc(-100px * var(--assistant-scaler)); height: 0; }
50% { visibility: hidden; top: calc(-100px * var(--assistant-scaler)); height: 0; }
55% { visibility: visible; top: calc(-125px * var(--assistant-scaler)); height: calc(20px * var(--assistant-scaler)); }
95% { visibility: visible; top: calc(-125px * var(--assistant-scaler)); height: calc(20px * var(--assistant-scaler)); }
100% { top: calc(-100px * var(--assistant-scaler)); height: 0; }
}
@keyframes beam-appear {
0% { visibility: hidden; top: calc(-12.5px * var(--assistant-scaler)); height: 0; }
50% { visibility: hidden; top: calc(-12.5px * var(--assistant-scaler)); height: 0; }
55% { visibility: visible; top: calc(-12.5px * var(--assistant-scaler)); height: calc(20px * var(--assistant-scaler)); width: calc(20px * var(--assistant-scaler)); }
100% { visibility: visible; top: calc(-12.5px * var(--assistant-scaler)); height: calc(20px * var(--assistant-scaler)); width: calc(20px * var(--assistant-scaler)); }
}
@keyframes beam-pulsar-appear {
0% { visibility: hidden; top: calc(-12.5px * var(--assistant-scaler)); height: 0; }
50% { visibility: hidden; top: calc(-12.5px * var(--assistant-scaler)); height: 0; }
55% { visibility: visible; top: calc(-12.5px * var(--assistant-scaler)); left: calc(-5px * var(--assistant-scaler)); height: calc(20px * var(--assistant-scaler)); width: cal(20px * var(--assistant-scaler)); opacity: 1; }
65% { top: calc(-25px * var(--assistant-scaler)); left: calc(-15px * var(--assistant-scaler)); height: calc(40px * var(--assistant-scaler)); width: calc(40px * var(--assistant-scaler)); opacity: 0; visibility: visible; }
74% { visibility: hidden; opacity: 0; }
75% { visibility: visible; top: calc(-12.5px * var(--assistant-scaler)); left: calc(-5px * var(--assistant-scaler)); height: calc(20px * var(--assistant-scaler)); width: calc(20px * var(--assistant-scaler)); opacity: 1; }
85% { top: calc(-25px * var(--assistant-scaler)); left: calc(-15px * var(--assistant-scaler)); height: calc(40px * var(--assistant-scaler)); width: calc(40px * var(--assistant-scaler)); opacity: 0; visibility: visible; }
94% { visibility: hidden; opacity: 0; }
100% { visibility: hidden; opacity: 0; }
}
@keyframes up-down {
0% { transform: translate(0); }
2.5% { transform: translate(0, 2%); }
25% { transform: translate(0); }
37.5% { transform: translate(0, 2%); }
50% { transform: translate(0); }
62.5% { transform: translate(0, 2%); }
75% { transform: translate(0); }
87.5% { transform: translate(0, 2%); }
100% { transform: translate(0); }
}
So, here my second swipe card for those, who want to test.
Uhmm got a questionā¦ You know how to fix the background of bubble popup with your theme? With your theme the popups got a terrible background
My theme??? I guess you meant Leon?
Regarding bubble card, Cloos postet following code to change the background.
use it under the pop-up card.
styles: |
.pop-up {
background-color: your color !important;
}
Hi,
Thanks for sharing your themes, I try to create mine with yours and Bubble. But one question, how itās possible to move the top bar to the bottom bar ?
Thanks
EDIT : itās done, i didnāt define Rounded by defaultā¦
And where should I put this code here? In rounded.yaml or configuration.yaml?
neither
itās a title card, it goes with your other cards
And where should I find them?
You need to create a new Dashboard in yaml mode Multiple dashboards - Home Assistant
Then you can place your cards in the dashboard File you are using.
For example my configuration looks like this:
Just as information. Home assistant changed services to actions in the newest release. Thats why you cant find service.
You can use bothā¦
thanks for the ideas and codes, iām creating my own dash with some modifications and mesh with andyās
In the end I chose the one on the bottom right.
Can anyone explain to me what is wrong with the graph card being like this? I copied the codes exactly the same.
/* Graph card style */
.graph {
background: var(--blue-tint);
display: flex;
overflow: hidden; /* Temporary fix for graph overflow bug */
}
.graph .name {
font-size: 12px;
line-height: 18px;
background: var(--black);
color: var(--white);
padding: 6px 10px;
border-radius: 100px;
z-index: 1;
}
.graph .icon {
display: none;
}
.graph .info {
margin-top: 0;
padding: 24px 24px 0 24px;
order: 1;
}
.graph hui-graph-header-footer {
order: 3;
}
.graph .header {
padding: 0 24px;
order: 2;
margin: 4px 0 -16px 0;
z-index: 1;
}
Newest HA update seems to have broken the CSS. I noticed it today as wellā¦
Hi all,
I want to try and replicate the design below for notifications but in the rounded style. Iāve been trying my best to do so, and using ChatGPT hasnāt yielded any results. Iām thinking someone smarter and better than I am can come up with something.
Any help?
I want to replace my current design which is a bit clunky and if you have a lot, can get messy.
EDIT:
Iāve continued to play around and Iāve made some headway with it.
Hereās my code;
type: custom:button-card
entity: input_boolean.black_bin_needs_taking_out
name: Take Black Bin Out
show_icon: false
tap_action:
action: toggle
styles:
card:
- border-radius: 25px
- border-style: none
- box-shadow: 0px 0px 10px -9px black
- background: |
[[[
return 'var(--primary-text-color)';
]]]
grid:
- grid-template-areas: '"icon_cells n"'
- grid-template-rows: 2px 16px
- grid-template-columns: 1fr
custom_fields:
icon_cells:
- justify-self: start
- margin-top: 15px
- margin-left: 15px
icon1:
- position: absolute
- width: 3em
- opacity: 20%
- color: |
[[[
if (entity.state == 'on') {
return 'var(--black)';
} else {
return 'var(--primary-background-color)';
}
]]]
- transform: rotate(-20deg)
- justify-self: end
- margin-top: 20px
name:
- font-size: 100%
- font-weight: bold
- justify-self: start
- margin-top: 10%
- color: black
- white-space: normal
- word-wrap: break-word
- text-align: left
custom_fields:
icon_cells: |
[[[
return `<ha-icon
icon="mdi:trash-can-outline"
style="width: 25px; height: 25px; color: black;">
</ha-icon>`;
]]]
icon1: |
[[[
return '<ha-icon icon="mdi:trash-can-outline"></ha-icon>';
]]]
But this is what it looks like currently;
I feel like Iām so close with this but I donāt know why the text is only displaying on the right and not next to the icon. Again, any help would be appreciated