Custom element doesn't exist: vertical-stack

My dashboard was working fine and after either the 2025.6.0 or 2025.6.1 update I get that error whenever I open my dashboard. My vertical stacks are all on custom button cards if that matters.

If I go into edit mode and change anything at all and exit edit mode, everything displays fine with no error. Once I refresh the page or open the mobile app again, it’s back to showing that error message on every card.

Any ideas what changed and how I can fix it?

I’d suggest uninstalling the mobile app and reinstalling it or clearing the mobile app’s cache.

Sorry, I should’ve mentioned that it also happens in a browser on my laptop. And I have cleared the cache on both and it didn’t fix the problem.

A few questions…

  1. Are you using the standard vertical stack card or a custom one like stack-in-card?

  2. What dashboard view type? Sections?

I believe it’s the standard vertical stack. My YAML says: type: vertical-stack. I am using Sections.

Ok, I’ll test your scenario and see if I get similar results. I’d suggest trying creating a different dashboard view like Masonry and see if you have the same issues.

Will do. Thanks for you help. I appreciate it.

I just created a new dash in Masonry with the same cards and it does the same thing.

Can you share your code for one of your vertical stacks?

  card:
      type: vertical-stack
      cards:
        - type: custom:button-card
          tap_action:
            action: toggle
          entity: fan.lr_ceiling_fan
          show_name: false
          state:
            - value: "off"
              icon: mdi:fan-off
            - value: "on"
              icon: mdi:fan
          card_mod:
            style: |
              ha-card {
                background: {% if states('fan.lr_ceiling_fan') == 'on' %} 
                  rgba(239,156,102,0.9) 
                {% else %}
                  rgba(96,114,116,0.6)
                {% endif %}
              }
          styles:
            card:
              - padding: 4px
              - width: 37px
              - height: 37px
              - border-radius: 99px
              - box-shadow: none
            icon:
              - width: 25px
              - color: rgba(0,0,0,0.5)
        - type: custom:button-card
          tap_action:
            action: toggle
            navigation_path: null
          entity: cover.lr_blinds
          icon: null
          show_name: false
          state:
            - value: closed
              icon: mdi:blinds-horizontal-closed
              styles:
                card:
                  - background-color: rgba(96,114,116,0.6)
            - value: open
              icon: mdi:blinds-horizontal
              styles:
                card:
                  - background-color: rgba(248,156,116,0.9)
          styles:
            card:
              - padding: 4px
              - width: 37px
              - height: 37px
              - border-radius: 99px
              - box-shadow: none
            icon:
              - width: 25px
              - color: rgba(0,0,0,0.5)
        - type: custom:button-card
          tap_action:
            action: toggle
          entity: input_boolean.lr_bright
          show_name: false
          card_mod:
            style: |
              ha-card {
                background: {% if states('input_boolean.lr_bright') == 'on' %} rgba(248,156,116,0.9) 
                {% else %}
                  rgba(96,114,116,0.6)
                {% endif %}
              }
          state:
            - value: "on"
              icon: mdi:brightness-7
            - value: "off"
              icon: mdi:brightness-5
          styles:
            card:
              - padding: 4px
              - width: 37px
              - height: 37px
              - border-radius: 99px
              - box-shadow: none
            icon:
              - width: 25px
              - color: rgba(0,0,0,0.5)

I’m fairly certain it’s both your button card code and the way card_mod was applied to the card.

I’ll provide you an example to test…

Test this code

type: vertical-stack
cards:
  - type: custom:button-card
    tap_action:
      action: toggle
    entity: fan.lr_ceiling_fan
    size: 12em
    show_name: false
    state:
      - value: "on"
        icon: mdi:fan
        styles:
          card:
            - background: maroon
            - border: 1px solid white
          icon:
            - color: white
            - animation: rotating 2s linear infinite
      - value: "off"
        icon: mdi:fan-off
        styles:
          card:
            - background: grey
            - border: 1px solid black
          icon:
            - color: black
            - animation: none
    styles:
      card:
        - padding: 4px
        - width: 37px
        - height: 37px
        - border-radius: 50%
        
  - type: custom:button-card
    tap_action:
      action: toggle
    entity: input_boolean.lr_bright
    size: 2em
    show_name: false
    state:
      - value: "on"
        icon: mdi:brightness-7
        styles:
          card:
            - background: blue
            - border: 1px solid gold
          icon:
            - color: yellow
            - animation: blink 2s linear infinite
      - value: "off"
        icon: mdi:brightness-5
        styles:
          card:
            - background: black
            - border: 1px solid grey
          icon:
            - color: grey
            - animation: none
    styles:
      card:
        - padding: 4px
        - width: 37px
        - height: 37px
        - border-radius: 50%

card mod is Jinga based and Button Card is JavaScript. I’d avoid card_mod unless completely necessary.

I am pretty much a newb, so I am just piecing together code I find and edit the little bit I figure out.

That code behaved the same as mine. Here is all of the code for the card it’s on (not just the vertical stack like you asked):

type: custom:button-card
name: Living Room
icon: mdi:sofa
tap_action:
  action: navigate
  navigation_path: living-room
entity: sensor.living_room_temperature
custom_fields:
  btn:
    card:
      type: vertical-stack
      cards:
        - type: custom:button-card
          tap_action:
            action: toggle
          entity: fan.lr_ceiling_fan
          show_name: false
          state:
            - value: "off"
              icon: mdi:fan-off
            - value: "on"
              icon: mdi:fan
          card_mod:
            style: |
              ha-card {
                background: {% if states('fan.lr_ceiling_fan') == 'on' %} 
                  rgba(239,156,102,0.9) 
                {% else %}
                  rgba(96,114,116,0.6)
                {% endif %}
              }
          styles:
            card:
              - padding: 4px
              - width: 37px
              - height: 37px
              - border-radius: 99px
              - box-shadow: none
            icon:
              - width: 25px
              - color: rgba(0,0,0,0.5)
        - type: custom:button-card
          tap_action:
            action: toggle
            navigation_path: null
          entity: cover.lr_blinds
          icon: null
          show_name: false
          state:
            - value: closed
              icon: mdi:blinds-horizontal-closed
              styles:
                card:
                  - background-color: rgba(96,114,116,0.6)
            - value: open
              icon: mdi:blinds-horizontal
              styles:
                card:
                  - background-color: rgba(248,156,116,0.9)
          styles:
            card:
              - padding: 4px
              - width: 37px
              - height: 37px
              - border-radius: 99px
              - box-shadow: none
            icon:
              - width: 25px
              - color: rgba(0,0,0,0.5)
        - type: custom:button-card
          tap_action:
            action: toggle
          entity: input_boolean.lr_bright
          show_name: false
          card_mod:
            style: |
              ha-card {
                background: {% if states('input_boolean.lr_bright') == 'on' %} rgba(248,156,116,0.9) 
                {% else %}
                  rgba(96,114,116,0.6)
                {% endif %}
              }
          state:
            - value: "on"
              icon: mdi:brightness-7
            - value: "off"
              icon: mdi:brightness-5
          styles:
            card:
              - padding: 4px
              - width: 37px
              - height: 37px
              - border-radius: 99px
              - box-shadow: none
            icon:
              - width: 25px
              - color: rgba(0,0,0,0.5)
styles:
  grid:
    - grid-template-areas: "\"n btn\" \"s btn\" \"i btn\""
    - grid-template-columns: 1fr min-content
    - grid-template-rows: min-content min-content 1fr
  card:
    - padding: 15px 10px 15px 10px
  custom_fields:
    btn:
      - justify-content: end
      - align-self: start
  name:
    - justify-self: start
    - align-self: start
    - font-size: 19px
    - font-weight: 600
    - color: |
        [[[
         if (states['binary_sensor.lr_devices_all_off'].state == 'on')
           return 'rgba(239,156,102,0.9)';
         else return 'rgba(96,114,116,0.6)'; 
         ]]]
  state:
    - min-height: 80px
    - justify-self: start
    - align-self: start
    - font-size: 13px
    - font-weight: 500
    - color: rgba(255,255,255,0.7)
  img_cell:
    - justify-content: start
    - position: absolute
    - width: 120px
    - height: 120px
    - left: 0
    - bottom: 0
    - margin: 0 0 -25px -25px
    - background: |
        [[[
         if (states['binary_sensor.lr_devices_all_off'].state == 'on')
           return 'rgba(239,156,102,0.9)';
         else return 'rgba(96,114,116,0.6)'; 
         ]]]
    - border-radius: 500px
  icon:
    - width: 60px
    - color: black
    - opacity: "0.5"
show_state: true
grid_options:
  columns: 12

Add a new card, select Manual all the way at the bottom of the selection list

Copy the code I provided and paste it here

If you are copying other user’s button card code, all entities need to be change to your entities. If one entity in the Button code isn’t available in your system, you may get an error.

Sharing a pic of the actual dashboard error will help

It would look like this

Code is fine, check your entities Although, I’d go about it differently

Your code works without error on it’s own card. It is just two of my buttons though and nothing else. What is it I have wrong?

My example was just two buttons for a test. Always go small and branch out.

You have all these entities, correct?

  1. sensor.living_room_temperature
  2. fan.lr_ceiling_fan
  3. cover.lr_blinds
  4. input_boolean.lr_bright
  5. binary_sensor.lr_devices_all_off

I figured, but I was descriptive in case something was different. Yes. I do have those entities.

For the past 4 days I have been in a nightmare trying to get my dashboard back up and running. I am running into the same problem. Something is up with the custom:vertical-stack integration. When I tap on one of my views (tabs along the top) it won’t load it properly and freezes. I have to close the browser and try again with no resolution.

*Edit: I mean custom:vertical-stack-in-card

I’d suggest trying custom:vertical-stack-in-card Unless that is what you meant. I had to move away from custom:stack-in-card

Which browser?

Sorry, I meant custom:vertical-stack-in-card, my apologies. My brain hurts trying to figure out why everything went to crap after the update. :frowning:

To add salt to the wound, I am using Supervised so I will be forced to convert over to HAOS. So I am thinking I might just do a fresh install and start over. I have several back ups of my config folder so I won’t lose my yaml at least.

I definitely get it!! I am running my test system with 2025.6.1, but reverted to 2025.5.3 on my main system. One of my main water valves lost the ability to turn on and off via HA.

Have you tested going back to the standard vertical stack card?

We should back a step, what card mod version are you using?

I’d definitely make the conversion. Your supervisor backup will translate to HAOS