{"$schema":"http://json-schema.org/draft-07/schema#","$comment":"LCARdS 2026.10.0-dev.1: generated from src/cards/schemas/ by scripts/generate-llm-schema.js; do not hand-edit.","title":"LCARdS Button Card Configuration","description":"Complete configuration schema for lcards-button custom card","type":"object","properties":{"rules":{"$ref":"../shared/rules.json"},"sounds":{"type":"object","description":"Per-card sound configuration. Overrides global sound settings for this card.","properties":{"enabled":{"type":"boolean","description":"Whether this card fires sounds. Set to false to completely silence this card. Default: true (omit to keep default)."},"card_tap":{"type":["string","null"],"description":"Asset key for card tap, or null to mute. Omit to use global scheme."},"card_hold":{"type":["string","null"],"description":"Asset key for card hold, or null to mute. Omit to use global scheme."},"card_double_tap":{"type":["string","null"],"description":"Asset key for card double-tap, or null to mute. Omit to use global scheme."},"card_hover":{"type":["string","null"],"description":"Asset key for card hover (desktop), or null to mute. Omit to use global scheme."},"slider_drag_start":{"type":["string","null"],"description":"Asset key for slider grab, or null to mute. Omit to use global scheme."},"slider_change":{"type":["string","null"],"description":"Asset key for slider value change, or null to mute. Omit to use global scheme."},"slider_drag_end":{"type":["string","null"],"description":"Asset key for slider release, or null to mute. Omit to use global scheme."},"toggle_on":{"type":["string","null"],"description":"Asset key for toggle-on, or null to mute. Omit to use global scheme."},"toggle_off":{"type":["string","null"],"description":"Asset key for toggle-off, or null to mute. Omit to use global scheme."}},"additionalProperties":false},"variables":{"type":"object","description":"Your own named values, available to templates as variables.<name> and {variables.<name>}.","additionalProperties":true},"zones":{"type":"object","description":"Named rectangles (px or *_percent of the card) that text fields and animations can target.","additionalProperties":{"type":"object","properties":{"x":{"type":"number"},"y":{"type":"number"},"width":{"type":"number"},"height":{"type":"number"},"x_percent":{"type":"number"},"y_percent":{"type":"number"},"width_percent":{"type":"number"},"height_percent":{"type":"number"}}}},"debug_zones":{"type":"boolean","description":"Outline every zone on the card (development aid)."},"type":{"type":"string","const":"custom:lcards-button","description":"Home Assistant card type identifier (required)"},"data_sources":{"type":"object","description":"Data sources for real-time entity tracking, historical data, and processing pipelines. Each key defines a named data source accessible in templates.","$comment":"Data sources enable entity subscriptions, history preload, and unified processing pipeline","examples":[{"temp":{"entity":"sensor.temperature","history":{"hours":6},"processing":{"fahrenheit":{"type":"convert_unit","from":"c","to":"f"},"smoothed":{"type":"smooth","input_source":"fahrenheit","method":"exponential","alpha":0.3},"rounded":{"type":"round","input_source":"smoothed","precision":1}}},"power":{"entity":"sensor.power","update_interval":1000,"processing":{"kilowatts":{"type":"scale","input_range":[0,1000],"output_range":[0,1]}}}}],"additionalProperties":{"type":"object","properties":{"entity":{"type":"string","format":"entity","pattern":"^[a-z_]+\\.[a-z0-9_]+$","description":"Entity ID to track (format: domain.object_id)","examples":["sensor.temperature"]},"attribute":{"type":"string","description":"Entity attribute to track instead of state","examples":["temperature"]},"enum_mapping":{"type":"object","description":"Map non-numeric states to numbers so they can be plotted or processed (on/off map to 1/0 automatically)","additionalProperties":{"type":"number"},"examples":[{"heat":2,"cool":1,"off":0}]},"update_interval":{"type":"number","minimum":0,"maximum":10000,"description":"Minimum milliseconds between updates (throttling, default: 100)","examples":[100]},"history":{"type":"object","description":"Historical data preload configuration","properties":{"enabled":{"type":"boolean","description":"Enable historical data preload (default: true)"},"hours":{"type":"number","minimum":1,"maximum":168,"description":"Hours of history to preload (1-168, default: 6)"},"days":{"type":"number","minimum":1,"maximum":7,"description":"Days of history to preload (1-7)"}}},"processing":{"type":"object","description":"Processing pipeline with named processors. Each processor transforms data and stores results in a buffer accessible via templates.","additionalProperties":{"type":"object","properties":{"type":{"type":"string","enum":["convert_unit","scale","smooth","expression","statistics","rate","trend","duration","threshold","clamp","round","delta"],"description":"Processor type","examples":["convert_unit"]},"input_source":{"type":"string","description":"Name of another processor in this pipeline whose output this one reads (creates a dependency chain). If omitted, uses the raw entity value.","examples":["fahrenheit"]},"enabled":{"type":"boolean","description":"Set false to pass values through unchanged (default true)"},"from":{"type":"string","description":"convert_unit: source unit (e.g. c, f, w, kw). Not a chaining key: use input_source."},"to":{"type":"string","description":"convert_unit: target unit"},"input_range":{"type":"array","items":{"type":"number"},"description":"scale: [min, max] of the input"},"output_range":{"type":"array","items":{"type":"number"},"description":"scale: [min, max] of the output"},"curve":{"type":"string","enum":["linear","exponential","logarithmic","sigmoid"],"description":"scale: mapping curve"},"method":{"type":"string","description":"smooth: exponential | moving_average | gaussian. round: round | floor | ceil"},"alpha":{"type":"number","description":"smooth (exponential): weight of the newest value, 0 to 1 (default 0.3)"},"window":{"type":["number","string"],"description":"smooth: sample count (default 10). statistics: time window like \"5m\" or \"session\""},"expression":{"type":"string","description":"expression: JavaScript expression using value/v, t, sources, entity and Math helpers"},"sources":{"type":"array","items":{"type":"string"},"description":"expression: processor names available as sources[0], sources[1], ..."},"stats":{"type":"array","items":{"type":"string"},"description":"statistics: min, max, mean, median, std_dev, q1, q3, range, count, sum"},"max_points":{"type":"number","description":"statistics: keep a time series of this many results"},"unit":{"type":"string","enum":["per_second","per_minute","per_hour"],"description":"rate: time unit"},"smoothing":{"type":"boolean","description":"rate: smooth the rate"},"samples":{"type":"number","description":"trend: samples in the slope window (default 5)"},"threshold":{"type":"number","description":"trend: slope below which the trend is stable. threshold: switch point"},"above":{"description":"threshold: output when above (default 1)"},"below":{"description":"threshold: output when below (default 0)"},"hysteresis":{"type":"number","description":"threshold: dead band around the switch point"},"condition":{"type":"string","description":"duration: condition like \"> 20\" that starts the timer"},"reset_on":{"type":"string","description":"duration: condition that resets the timer"},"min":{"type":"number","description":"clamp: lower bound"},"max":{"type":"number","description":"clamp: upper bound"},"precision":{"type":"number","description":"round: decimal places (default 0)"},"absolute":{"type":"boolean","description":"delta: report the absolute change"}},"required":["type"]}},"window_seconds":{"type":["number","string"],"description":"Rolling buffer window: seconds, or a duration like \"5m\" or \"1h\". About 10 points per second are kept, at most 1,000 (default 60)","examples":[60]},"min_emit_ms":{"type":"number","minimum":10,"description":"Minimum ms between updates sent to cards (throttle, default 100)"},"coalesce_ms":{"type":"number","minimum":0,"description":"Window in ms for merging rapid changes into one update (default: 40% of min_emit_ms, at least 20)"},"max_delay_ms":{"type":"number","minimum":0,"description":"Longest ms an update may be held back while merging (default: 3 x coalesce_ms)"},"emit_on_same_value":{"type":"boolean","description":"Send updates even when the value did not change (default true)"}},"required":["entity"]}},"triggers_update":{"type":"array","items":{"type":"string","format":"entity","pattern":"^[a-z_]+\\.[a-z0-9_]+$","description":"Entity ID whose state change should trigger a re-render","examples":["sensor.temperature"]},"description":"Extra entity IDs to watch for state changes. When any listed entity changes, all templates on this card are re-evaluated. Use this for JavaScript templates ([[[...]]]) that reference entities LCARdS cannot detect automatically via static analysis.","examples":[["sensor.outdoor_temperature"]]},"entity":{"type":"string","format":"entity","pattern":"^[a-z_]+\\.[a-z0-9_]+$","description":"Home Assistant entity ID to control or monitor (format: domain.object_id)","examples":["light.living_room"]},"id":{"type":"string","pattern":"^[a-zA-Z0-9_-]+$","description":"Unique card identifier for rule targeting, animations, and debugging (alphanumeric, underscore, hyphen)","examples":["main-button"]},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_-]+$"},"description":"Tags for bulk rule targeting and grouping. Allows applying rules to multiple cards at once using tag selectors.","examples":[["navigation","primary"]]},"height":{"oneOf":[{"type":"number","minimum":1,"description":"Card height in pixels (bare integer, e.g. 56 = 56px)"},{"type":"string","pattern":"^[\\d.]+(\\s*(px|vh|vw|%|em|rem|vmin|vmax))?$","description":"Card height with CSS unit (e.g. 200px, 50vh, 10em)"}],"description":"Card height override. Bare integer = px (e.g. 200 = 200px). CSS units accepted: 200px, 50vh, 10em."},"width":{"oneOf":[{"type":"number","minimum":1,"description":"Card width in pixels (bare integer, e.g. 300 = 300px)"},{"type":"string","pattern":"^[\\d.]+(\\s*(px|vh|vw|%|em|rem|vmin|vmax))?$","description":"Card width with CSS unit (e.g. 400px, 50vw, 10em)"}],"description":"Card width override. Bare integer = px (e.g. 400 = 400px). CSS units accepted: 400px, 50vw, 10em."},"min_height":{"oneOf":[{"type":"number","minimum":0,"description":"Minimum card height in pixels (bare integer, e.g. 40 = 40px)"},{"type":"string","pattern":"^[\\d.]+(\\s*(px|vh|vw|%|em|rem|vmin|vmax))?$","description":"Minimum card height with CSS unit (e.g. 40px, 10vh)"}],"description":"Minimum card height floor. Overrides the --lcards-button-min-height CSS token. Bare integer = px."},"min_width":{"oneOf":[{"type":"number","minimum":0,"description":"Minimum card width in pixels (bare integer, e.g. 80 = 80px)"},{"type":"string","pattern":"^[\\d.]+(\\s*(px|vh|vw|%|em|rem|vmin|vmax))?$","description":"Minimum card width with CSS unit (e.g. 80px, 10vw)"}],"description":"Minimum card width floor. Bare integer = px."},"max_height":{"oneOf":[{"type":"number","minimum":1,"description":"Maximum card height in pixels (bare integer, e.g. 400 = 400px)"},{"type":"string","pattern":"^[\\d.]+(\\s*(px|vh|vw|%|em|rem|vmin|vmax))?$","description":"Maximum card height with CSS unit (e.g. 400px, 80vh, 20em)"}],"description":"Maximum card height ceiling. Bare integer = px (e.g. 400 = 400px). CSS units accepted: 400px, 80vh, 10em."},"max_width":{"oneOf":[{"type":"number","minimum":1,"description":"Maximum card width in pixels (bare integer, e.g. 600 = 600px)"},{"type":"string","pattern":"^[\\d.]+(\\s*(px|vh|vw|%|em|rem|vmin|vmax))?$","description":"Maximum card width with CSS unit (e.g. 600px, 80vw, 20em)"}],"description":"Maximum card width ceiling. Bare integer = px (e.g. 600 = 600px). CSS units accepted: 600px, 80vw, 10em."},"overflow":{"type":"string","enum":["visible","hidden","clip","scroll","auto"],"description":"CSS overflow shorthand on the card host element (sets both axes unless overridden per-axis)."},"overflow_x":{"type":"string","enum":["visible","hidden","clip","scroll","auto"],"description":"CSS overflow-x on the card host element. Overrides the overflow shorthand for the horizontal axis."},"overflow_y":{"type":"string","enum":["visible","hidden","clip","scroll","auto"],"description":"CSS overflow-y on the card host element. Overrides the overflow shorthand for the vertical axis."},"z_index":{"type":"integer","description":"CSS z-index stacking order on the card host element."},"interactive":{"type":"boolean","default":true,"description":"When false, hover colour changes and hover animations are suppressed. The cursor defaults to the arrow unless overridden via style.cursor. Tap/hold actions still fire if configured."},"control":{"type":"object","description":"Control behavior configuration","properties":{"attribute":{"type":"string","description":"Entity attribute to control (leave blank to control entity state)","examples":["brightness"]}},"additionalProperties":true},"preset":{"type":"string","description":"Style preset name (button preset when used alone; component preset name when component is set)","examples":["lozenge"]},"component":{"type":"string","enum":["dpad","dpad_voyager","alert"],"description":"Component type (mutually exclusive with preset)","enumDescriptions":["D-pad directional control (up/down/left/right/center)","D-pad directional control, Voyager LCARS ring styling (up/down/left/right/center)","Alert symbol with animated bar segments (red/blue/green/yellow/grey/black)"]},"text":{"type":"object","description":"Multi-text label system","$comment":"Text fields use arbitrary keys. \"default\" provides styling inherited by all other text fields. All other keys create actual rendered text elements.","examples":[{"label1":{"content":"Temperature","position":"top-left","font_size":18,"color":"#FF9900"},"status":{"content":"{entity.state}","position":"center"}}],"properties":{"default":{"type":"object","description":"Default styling inherited by all text fields (does not render)","$comment":"This is NOT rendered as a text element - it only provides default styles","properties":{"position":{"type":"string","enum":["top-left","top-center","top-right","center-left","center","center-right","bottom-left","bottom-center","bottom-right","top","bottom","left","right","left-center","right-center"],"description":"Default text position (e.g., \"top-left\", \"center\")"},"rotation":{"type":"number","minimum":-360,"maximum":360,"default":0,"description":"Text rotation in degrees (-360 to 360)"},"padding":{"$ref":"#/$defs/paddingSchema"},"font_size":{"oneOf":[{"type":"number","minimum":1,"maximum":200,"default":14,"description":"Font size in pixels (1-200)"},{"type":"string","pattern":"^(\\d+px|\\d+\\.?\\d*rem|\\d+\\.?\\d*em|var\\(--[a-z-]+\\))$","description":"CSS value or theme token","examples":["14px"]}]},"color":{"$ref":"../shared/state-color.json"},"font_weight":{"type":["string","number"],"default":"normal","description":"Font weight: CSS keyword (normal, bold) or numeric value (100–900)","examples":["normal"]},"font_family":{"type":"string","format":"font-family","description":"CSS font-family (single font, comma-separated stack, or CSS variable)","examples":["Arial"]},"text_transform":{"type":"string","enum":["none","uppercase","lowercase","capitalize"],"default":"none","description":"Text transformation","enumDescriptions":["No transformation (original case)","ALL UPPERCASE","all lowercase","Capitalize First Letter"]},"anchor":{"type":"string","enum":["start","middle","end"],"default":"middle","description":"Horizontal text alignment","enumDescriptions":["Left-aligned","Center-aligned","Right-aligned"]},"baseline":{"type":"string","enum":["hanging","middle","central","alphabetic"],"default":"middle","description":"Vertical text alignment","enumDescriptions":["Top of text box","Center of text box","Mathematical center","Bottom of text (baseline)"]},"display_format":{"type":"string","enum":["friendly","raw","parts","unit"],"default":"friendly","description":"Default display format for entity state/attribute tokens. \"friendly\" uses HA's translated display string. \"raw\" returns the unmodified value. \"parts\" joins value and unit. \"unit\" returns only the unit."},"background":{"$ref":"../shared/state-color.json"},"background_padding":{"type":"number","minimum":0,"default":8,"description":"Horizontal padding between text glyphs and the background rect edges (px)."},"background_radius":{"type":"number","minimum":0,"default":4,"description":"Corner radius of the background rect (px)."},"background_width":{"type":["number","null"],"minimum":1,"description":"Fixed explicit width of the background rect (px). Overrides auto-sizing from text metrics. Text will overflow if content is wider than this value."},"background_min_width":{"type":["number","null"],"minimum":1,"description":"Minimum width of the background rect (px). Auto-sizes to text width but never smaller than this value. Safe for dynamic content."},"font_size_percent":{"type":"number","minimum":1,"maximum":100,"description":"Default font size as a percentage of the card height. All fields inherit this unless they set an explicit font_size. Useful for bar-label style presets that should auto-scale with the configured card height."},"cap_height_ratio":{"type":"number","minimum":0.1,"maximum":1,"description":"Ratio of the font cap-height to the em-square (font-size). Used to correct font_size_percent so visible glyph height matches the requested percentage of the container. Defaults to the theme token value (0.86 for Antonio). Override when using a different font family."}}}},"additionalProperties":{"type":"object","description":"Text field configuration (key becomes field name)","$comment":"Each key creates a separate SVG text element. Use descriptive names like \"label1\", \"status\", \"title\"","properties":{"content":{"type":"string","description":"Text content. Templates are evaluated by default (set template:false to disable)","examples":["Temperature"]},"show":{"type":"boolean","default":true,"description":"Whether to show this text field"},"position":{"type":"string","enum":["top-left","top-center","top-right","center-left","center","center-right","bottom-left","bottom-center","bottom-right","top","bottom","left","right","left-center","right-center"],"description":"Text position (overrides default)"},"x":{"type":"number","description":"Absolute X coordinate in pixels"},"y":{"type":"number","description":"Absolute Y coordinate in pixels"},"x_percent":{"type":"number","minimum":0,"maximum":100,"description":"X position as percentage of card width (0-100)"},"y_percent":{"type":"number","minimum":0,"maximum":100,"description":"Y position as percentage of card height (0-100)"},"rotation":{"type":"number","minimum":-360,"maximum":360,"default":0,"description":"Text rotation in degrees (-360 to 360)"},"padding":{"$ref":"#/$defs/paddingSchema"},"font_size":{"oneOf":[{"type":"number","minimum":1,"maximum":200,"description":"Font size in pixels (1-200)"},{"type":"string","pattern":"^(\\d+px|\\d+\\.?\\d*rem|\\d+\\.?\\d*em|var\\(--[a-z-]+\\))$","description":"CSS value or theme token","examples":["14px"]}]},"color":{"$ref":"../shared/state-color.json"},"font_weight":{"type":["string","number"],"default":"normal","description":"Font weight: CSS keyword (normal, bold) or numeric value (100–900)","examples":["normal"]},"font_family":{"type":"string","format":"font-family","description":"CSS font-family (single font, comma-separated stack, or CSS variable)","examples":["Arial"]},"text_transform":{"type":"string","enum":["none","uppercase","lowercase","capitalize"],"default":"none","description":"Text transformation","enumDescriptions":["No transformation (original case)","ALL UPPERCASE","all lowercase","Capitalize First Letter"]},"anchor":{"type":"string","enum":["start","middle","end"],"default":"middle","description":"Horizontal text alignment","enumDescriptions":["Left-aligned","Center-aligned","Right-aligned"]},"baseline":{"type":"string","enum":["hanging","middle","central","alphabetic"],"default":"middle","description":"Vertical text alignment","enumDescriptions":["Top of text box","Center of text box","Mathematical center","Bottom of text (baseline)"]},"template":{"type":"boolean","default":true,"description":"Template evaluation is enabled by default for this field’s content (e.g. {entity.state}, {{ states(...) }}, [[[ ... ]]]). Set to false to render {...} / [[[...]]] text literally without evaluating it."},"stretch":{"oneOf":[{"type":"boolean","description":"true = stretch text to fill 100% of the available width"},{"type":"number","minimum":0,"maximum":1,"description":"Fraction of available width to stretch text to (0–1)"}],"description":"Stretch text to fill a fraction of the available width using SVG textLength / lengthAdjust=\"spacingAndGlyphs\". true = 100%, 0.8 = 80%."},"font_size_percent":{"type":"number","minimum":1,"maximum":100,"description":"Font size as a percentage of the text area height (component mode). Overrides font_size when set."},"cap_height_ratio":{"type":"number","minimum":0.1,"maximum":1,"description":"Ratio of the font cap-height to the em-square. Used to correct font_size_percent so visible glyph height matches the requested percentage. Defaults to the theme token value (0.86 for Antonio). Override when using a different font."},"zone":{"type":"string","description":"Named zone key to route this text field to. For component cards this matches a key in the component's zones map. For slider/elbow cards this matches a named layout zone (e.g. left, track, vertical_bar). Defaults to the first zone if not set."},"display_format":{"type":"string","enum":["friendly","raw","parts","unit"],"default":"friendly","description":"How to format entity state or attribute values in this text field. \"friendly\" (default) uses HA's translated display string matching native cards. \"raw\" returns the unmodified state/attribute value. \"parts\" joins value and unit from HA's ToParts API. \"unit\" returns only the unit portion.","examples":["friendly"]},"background":{"$ref":"../shared/state-color.json"},"background_padding":{"type":"number","minimum":0,"default":8,"description":"Horizontal padding between text glyphs and the background rect edges (px)."},"background_radius":{"type":"number","minimum":0,"default":4,"description":"Corner radius of the background rect (px)."},"background_width":{"type":["number","null"],"minimum":1,"description":"Fixed explicit width of the background rect (px). Overrides auto-sizing from text metrics. Text will overflow if content is wider than this value."},"background_min_width":{"type":["number","null"],"minimum":1,"description":"Minimum width of the background rect (px). Auto-sizes to text width but never smaller than this value. Safe for dynamic content."}}}},"show_icon":{"type":"boolean","default":true,"description":"Whether to show the icon"},"icon_area":{"type":"string","enum":["left","right","top","bottom","none"],"default":"left","description":"Icon area position relative to main area","enumDescriptions":["Vertical bar on left side","Vertical bar on right side","Horizontal bar at top","Horizontal bar at bottom","No separate icon area (icon in main area)"]},"icon":{"type":"string","examples":["mdi:lightbulb"]},"icon_area_background":{"title":"Icon Area Background Colour","description":"Background colour for the icon area (supports state-based colours)","default":"transparent","$comment":"Icon area background is independent of main card background. Useful for creating visual separation.","oneOf":[{"type":"string","pattern":"^(#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{4}|[0-9A-Fa-f]{6}|[0-9A-Fa-f]{8})$|(aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen|transparent|currentcolor|currentColor|match-light)$|theme:|var\\(--|(rgb|rgba|hsl|hsla|hwb|lab|lch|oklab|oklch|color|color-mix)\\(|(alpha|darken|lighten|saturate|desaturate|mix|base)\\()","description":"Single colour value applied to all entity states","examples":["#FF9900"],"title":"Simple Colour"},{"type":"object","title":"State-Dependent Colours","description":"Map of entity state names to colour values. Well-known keys: default, active, inactive, unavailable, zero, non_zero, hover, pressed. Any custom state name (e.g. \"heating\", \"above:90\") is also accepted.","examples":[{"default":"#888888","active":"alpha(var(--lcards-orange), 0.08)","inactive":"#444444"}],"properties":{"default":{"type":"string","pattern":"^(#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{4}|[0-9A-Fa-f]{6}|[0-9A-Fa-f]{8})$|(aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen|transparent|currentcolor|currentColor|match-light)$|theme:|var\\(--|(rgb|rgba|hsl|hsla|hwb|lab|lch|oklab|oklch|color|color-mix)\\(|(alpha|darken|lighten|saturate|desaturate|mix|base)\\()","description":"Fallback colour when no other state key matches","examples":["#FF9900"]},"active":{"type":"string","pattern":"^(#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{4}|[0-9A-Fa-f]{6}|[0-9A-Fa-f]{8})$|(aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen|transparent|currentcolor|currentColor|match-light)$|theme:|var\\(--|(rgb|rgba|hsl|hsla|hwb|lab|lch|oklab|oklch|color|color-mix)\\(|(alpha|darken|lighten|saturate|desaturate|mix|base)\\()","description":"Colour when entity is on/active","examples":["#FF9900"]},"inactive":{"type":"string","pattern":"^(#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{4}|[0-9A-Fa-f]{6}|[0-9A-Fa-f]{8})$|(aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen|transparent|currentcolor|currentColor|match-light)$|theme:|var\\(--|(rgb|rgba|hsl|hsla|hwb|lab|lch|oklab|oklch|color|color-mix)\\(|(alpha|darken|lighten|saturate|desaturate|mix|base)\\()","description":"Colour when entity is off/inactive","examples":["#FF9900"]},"unavailable":{"type":"string","pattern":"^(#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{4}|[0-9A-Fa-f]{6}|[0-9A-Fa-f]{8})$|(aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen|transparent|currentcolor|currentColor|match-light)$|theme:|var\\(--|(rgb|rgba|hsl|hsla|hwb|lab|lch|oklab|oklch|color|color-mix)\\(|(alpha|darken|lighten|saturate|desaturate|mix|base)\\()","description":"Colour when entity is unavailable","examples":["#FF9900"]},"zero":{"type":"string","pattern":"^(#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{4}|[0-9A-Fa-f]{6}|[0-9A-Fa-f]{8})$|(aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen|transparent|currentcolor|currentColor|match-light)$|theme:|var\\(--|(rgb|rgba|hsl|hsla|hwb|lab|lch|oklab|oklch|color|color-mix)\\(|(alpha|darken|lighten|saturate|desaturate|mix|base)\\()","description":"Colour when entity state is numeric 0","examples":["#FF9900"]},"non_zero":{"type":"string","pattern":"^(#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{4}|[0-9A-Fa-f]{6}|[0-9A-Fa-f]{8})$|(aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen|transparent|currentcolor|currentColor|match-light)$|theme:|var\\(--|(rgb|rgba|hsl|hsla|hwb|lab|lch|oklab|oklch|color|color-mix)\\(|(alpha|darken|lighten|saturate|desaturate|mix|base)\\()","description":"Colour when entity state is a non-zero number","examples":["#FF9900"]},"hover":{"type":"string","pattern":"^(#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{4}|[0-9A-Fa-f]{6}|[0-9A-Fa-f]{8})$|(aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen|transparent|currentcolor|currentColor|match-light)$|theme:|var\\(--|(rgb|rgba|hsl|hsla|hwb|lab|lch|oklab|oklch|color|color-mix)\\(|(alpha|darken|lighten|saturate|desaturate|mix|base)\\()","description":"Colour on hover interaction","examples":["#FF9900"]},"pressed":{"type":"string","pattern":"^(#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{4}|[0-9A-Fa-f]{6}|[0-9A-Fa-f]{8})$|(aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen|transparent|currentcolor|currentColor|match-light)$|theme:|var\\(--|(rgb|rgba|hsl|hsla|hwb|lab|lch|oklab|oklch|color|color-mix)\\(|(alpha|darken|lighten|saturate|desaturate|mix|base)\\()","description":"Colour on press/tap interaction","examples":["#FF9900"]}},"additionalProperties":{"type":"string","pattern":"^(#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{4}|[0-9A-Fa-f]{6}|[0-9A-Fa-f]{8})$|(aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen|transparent|currentcolor|currentColor|match-light)$|theme:|var\\(--|(rgb|rgba|hsl|hsla|hwb|lab|lch|oklab|oklch|color|color-mix)\\(|(alpha|darken|lighten|saturate|desaturate|mix|base)\\()","description":"Colour for a custom state key (e.g. \"heating\", \"cooling\", \"above:90\", \"below:20\")","examples":["#FF9900"]}}]},"icon_area_size":{"type":"number","minimum":20,"maximum":500,"default":60,"description":"Fixed size for icon area in pixels (width for left/right, height for top/bottom, default: 60)"},"divider":{"type":"object","description":"Divider line between icon area and main area","examples":[{"width":2,"color":"#FF9900"}],"properties":{"width":{"type":"number","minimum":0,"maximum":200,"default":0,"description":"Divider width in pixels (0 = no divider, default: 0)"},"color":{"type":"string","pattern":"^(#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{4}|[0-9A-Fa-f]{6}|[0-9A-Fa-f]{8})$|(aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen|transparent|currentcolor|currentColor|match-light)$|theme:|var\\(--|(rgb|rgba|hsl|hsla|hwb|lab|lch|oklab|oklch|color|color-mix)\\(|(alpha|darken|lighten|saturate|desaturate|mix|base)\\()","description":"Divider colour","examples":["#FF9900"]}}},"icon_style":{"type":"object","description":"Advanced icon styling configuration","examples":[{"type":"mdi","color":"#FF9900","size":32,"position":"center"}],"properties":{"type":{"type":"string","enum":["mdi","si","entity"],"default":"mdi","description":"Icon type","enumDescriptions":["Material Design Icons","Simple Icons","Entity state icon"]},"color":{"$ref":"../shared/state-color.json"},"icon":{"title":"State-Dependent Icons","description":"Override icon per entity state. Falls back to the top-level \"icon\" field when no state matches.","oneOf":[{"type":"string","title":"Single Icon","description":"One icon for all states","examples":["mdi:lightbulb"]},{"type":"object","title":"State-Dependent Icons","description":"Different icons for different entity states","examples":[{"active":"mdi:lightbulb","inactive":"mdi:lightbulb-off"}],"properties":{"default":{"type":"string","description":"Default icon (fallback when no other state matches)","examples":["mdi:lightbulb"]},"active":{"type":"string","description":"Icon when entity is on/active","examples":["mdi:lightbulb"]},"inactive":{"type":"string","description":"Icon when entity is off/inactive","examples":["mdi:lightbulb-off"]},"unavailable":{"type":"string","description":"Icon when entity is unavailable or unknown","examples":["mdi:help-circle-outline"]},"zero":{"type":"string","description":"Icon when entity state is numeric 0","examples":["mdi:numeric-0-circle"]},"non_zero":{"type":"string","description":"Icon when entity state is a non-zero number","examples":["mdi:numeric-positive-1"]}},"additionalProperties":{"type":"string","description":"Custom state icon (e.g., \"on\", \"off\", \"heat\", \"cool\")"}}]},"size":{"type":"number","minimum":8,"maximum":200,"default":24,"description":"Icon size in pixels (8-200, default: 24)"},"rotation":{"type":"number","minimum":-360,"maximum":360,"default":0,"description":"Icon rotation in degrees (-360 to 360)"},"position":{"type":"string","enum":["top-left","top-center","top-right","center-left","center","center-right","bottom-left","bottom-center","bottom-right","top","bottom","left","right","left-center","right-center"],"default":"center","description":"Icon position within icon area"},"x":{"type":"number","description":"Absolute X coordinate in pixels"},"y":{"type":"number","description":"Absolute Y coordinate in pixels"},"x_percent":{"type":"number","minimum":0,"maximum":100,"description":"X position as percentage (0-100)"},"y_percent":{"type":"number","minimum":0,"maximum":100,"description":"Y position as percentage (0-100)"},"spacing":{"type":"number","minimum":0,"maximum":100,"default":8,"description":"Spacing between icon and text in pixels (default: 8)"},"padding":{"$ref":"#/$defs/paddingSchema"},"padding_left":{"type":"number","minimum":0,"maximum":200,"description":"Left padding in pixels (overrides padding)"},"padding_right":{"type":"number","minimum":0,"maximum":200,"description":"Right padding in pixels (overrides padding)"},"padding_top":{"type":"number","minimum":0,"maximum":200,"description":"Top padding in pixels (overrides padding)"},"padding_bottom":{"type":"number","minimum":0,"maximum":200,"description":"Bottom padding in pixels (overrides padding)"}}},"style":{"type":"object","properties":{"cursor":{"type":"string","description":"CSS cursor style shown when hovering over the button. Overrides the automatic cursor derived from the interactive flag.","examples":["pointer"]},"card":{"type":"object","properties":{"color":{"type":"object","properties":{"background":{"$ref":"../shared/state-color.json"}}}}},"border":{"type":"object","properties":{"width":{"oneOf":[{"type":"number"},{"type":"string","description":"Theme token reference"},{"type":"object","properties":{"top":{"oneOf":[{"type":"number"},{"type":"string"}]},"right":{"oneOf":[{"type":"number"},{"type":"string"}]},"bottom":{"oneOf":[{"type":"number"},{"type":"string"}]},"left":{"oneOf":[{"type":"number"},{"type":"string"}]}}}]},"color":{"$ref":"../shared/state-color.json"},"radius":{"oneOf":[{"type":"number","minimum":0,"maximum":100,"default":12},{"type":"string","pattern":"^(\\{theme:.*\\}|var\\(--.*\\))$","description":"Theme token reference"},{"type":"object","properties":{"top_left":{"oneOf":[{"type":"number"},{"type":"string"}]},"top_right":{"oneOf":[{"type":"number"},{"type":"string"}]},"bottom_right":{"oneOf":[{"type":"number"},{"type":"string"}]},"bottom_left":{"oneOf":[{"type":"number"},{"type":"string"}]}}}]}}},"text":{"type":"object","properties":{"default":{"type":"object","properties":{"color":{"$ref":"../shared/state-color.json"},"font_size":{"oneOf":[{"type":"number"},{"type":"string","description":"CSS value or theme token (e.g., \"14px\", \"var(--lcars-text-size)\")"}]},"font_weight":{"type":["string","number"]},"font_family":{"type":"string","format":"font-family"}}}}}}},"tap_action":{"$ref":"#/$defs/actionSchema"},"hold_action":{"$ref":"#/$defs/actionSchema"},"double_tap_action":{"$ref":"#/$defs/actionSchema"},"animations":{"$ref":"#/$defs/lcards_button_animations"},"background_animation":{"$ref":"../shared/background-animation.json"},"shape_texture":{"type":"object","description":"SVG-native texture/animation rendered inside the button shape boundary","properties":{"preset":{"type":"string","description":"Texture preset name","enum":["grid","diagonal","hexagonal","dots","fluid","shimmer","plasma","flow","level","pulse","scanlines","image"]},"opacity":{"description":"Texture opacity (0-1). Supports state-based object.","oneOf":[{"type":"number","minimum":0,"maximum":1},{"type":"object","description":"State-based values: keys are states (default, active, inactive, unavailable, ...), values are numbers"}]},"speed":{"description":"Animation speed multiplier. Supports state-based object.","oneOf":[{"type":"number","minimum":0},{"type":"object"}]},"mix_blend_mode":{"type":"string","description":"CSS mix-blend-mode for texture blending","enum":["normal","multiply","screen","overlay","hard-light","soft-light","color-burn","color-dodge"]},"config":{"type":"object","description":"Preset-specific configuration. Supports entity-reactive values: map_range descriptor ({ map_range: { attribute, input, output } }) or template strings ([[[...]]]), including { template, default } form for numeric params like fill_pct.","additionalProperties":true}},"additionalProperties":false},"filters":{"type":"array","description":"Visual filters applied to entire button (CSS and SVG filter primitives)","items":{"$ref":"../shared/filter.json"}},"svg":{"type":"object","properties":{"content":{"type":"string"},"src":{"type":"string"},"viewBox":{"type":"string"},"preserveAspectRatio":{"type":"string"},"enable_tokens":{"type":"boolean"},"allow_scripts":{"type":"boolean"},"segments":{"type":"object","description":"Segment configurations keyed by ID. Use \"default\" for shared config.","properties":{"default":{"type":"object","description":"Default configuration inherited by all segments","properties":{"entity":{"type":"string","format":"entity","pattern":"^[a-z_]+\\.[a-z0-9_]+$","description":"Entity ID (format: domain.object_id)","examples":["light.living_room"]},"tap_action":{"$ref":"#/$defs/actionSchema"},"hold_action":{"$ref":"#/$defs/actionSchema"},"double_tap_action":{"$ref":"#/$defs/actionSchema"},"style":{"$ref":"#/$defs/lcards_button_svg_segments_default_style"},"animations":{"$ref":"#/$defs/lcards_button_animations"}}}},"additionalProperties":{"type":"object","description":"Per-segment configuration (overrides default)","properties":{"selector":{"type":"string","description":"CSS selector override (defaults to \"#<segment-id>\")"},"entity":{"type":"string","format":"entity","pattern":"^[a-z_]+\\.[a-z0-9_]+$","description":"Entity ID (format: domain.object_id)","examples":["light.living_room"]},"tap_action":{"$ref":"#/$defs/actionSchema"},"hold_action":{"$ref":"#/$defs/actionSchema"},"double_tap_action":{"$ref":"#/$defs/actionSchema"},"style":{"$ref":"#/$defs/lcards_button_svg_segments_default_style"},"animations":{"$ref":"#/$defs/lcards_button_animations"}}}}}},"alert":{"type":"object","description":"Alert component configuration","properties":{"color":{"type":"object","description":"Colour shorthand: overrides the active preset's colours","properties":{"shape":{"type":"string","description":"Fill colour for the shield shape","examples":["var(--lcards-orange)"]},"bars":{"type":"string","description":"Stroke colour for the bar lines","examples":["var(--lcards-orange)"]}}},"custom_presets":{"type":"object","description":"Custom or override presets (merged over built-ins)","additionalProperties":{"type":"object","properties":{"segments":{"type":"object","properties":{"shape":{"type":"object","properties":{"style":{"type":"object","properties":{"fill":{"type":"string"}}}}},"bars":{"type":"object","properties":{"style":{"type":"object","properties":{"stroke":{"type":"string"}}}}}}},"text":{"type":"object","additionalProperties":{"type":"object","properties":{"content":{"type":"string"},"color":{"type":"string"}}}}}}},"segments":{"type":"object","description":"Per-segment fine-grained overrides (managed by Segments tab)","additionalProperties":{"type":"object","properties":{"style":{"type":"object","properties":{"fill":{"type":"string"},"stroke":{"type":"string"}}}}}}}},"dpad":{"type":"object","properties":{"segments":{"type":"object","description":"Segment configurations. Use \"default\" key for common properties applied to all segments. Other keys are segment IDs (up, down, left, right, up-left, up-right, down-left, down-right, center).","additionalProperties":{"type":"object","properties":{"selector":{"type":"string","description":"CSS selector for SVG element (defaults to #{segment-id} if not specified)"},"entity":{"type":"string","format":"entity","pattern":"^[a-z_]+\\.[a-z0-9_]+$","description":"Entity ID for this segment (format: domain.object_id, overrides card entity)","examples":["light.living_room"]},"tap_action":{"$ref":"#/$defs/actionSchema"},"hold_action":{"$ref":"#/$defs/actionSchema"},"double_tap_action":{"$ref":"#/$defs/actionSchema"},"style":{"type":"object","description":"SVG styling for the segment","properties":{"fill":{"$ref":"../shared/state-color.json"},"stroke":{"$ref":"../shared/state-color.json"},"stroke-width":{"title":"Stroke Width","description":"SVG stroke width (number in pixels, CSS string, or state-based)","oneOf":[{"type":"number","minimum":0,"maximum":50,"description":"Stroke width in pixels (0-50)"},{"type":"string","pattern":"^\\d+(\\.\\d+)?(px|em|rem)?$","description":"CSS stroke width value","examples":["2px"]},{"$ref":"../shared/state-color.json"}]}}},"animations":{"$ref":"#/$defs/lcards_button_animations"}}}}}},"ranges_attribute":{"type":"string","description":"Entity attribute to use as the numeric value for ALL state-based range conditions (above:/below:/between: keys) across the entire card: icon_style.icon, icon_style.color, text color, background, border, and config.ranges preset switching. Use \"brightness_pct\" for a computed 0-100 light brightness value. Defaults to evaluating the raw entity state string.","examples":["brightness_pct"]},"state_attribute":{"type":"string","description":"Entity attribute whose String() value is used as the highest-priority key for ALL exact-match state-color lookups across the card. Booleans become \"true\"/\"false\"; null becomes \"null\"; strings are used as-is. Classified state (active/inactive) is always derived from entity.state and is unaffected. Can be used alongside ranges_attribute.","examples":["effect"]},"state_classification":{"type":"object","description":"Override how raw entity states are mapped to style buckets. Use built-in buckets (active/inactive/default) or define your own named buckets. Explicit state keys in style config always take priority over this.","properties":{"active":{"type":"array","items":{"type":"string"},"description":"Additional states to classify as \"active\" (augments the built-in active list).","examples":[["home","work","gym"]]},"inactive":{"type":"array","items":{"type":"string"},"description":"States to explicitly classify as \"inactive\".","examples":[["not_home","away"]]},"else":{"type":"string","description":"Bucket for states not matched by any list (built-in or custom). Accepts built-in bucket names (active/inactive/default) or a custom bucket name. Defaults to \"inactive\" when omitted."}},"additionalProperties":{"type":"array","items":{"type":"string"},"description":"Custom bucket: an array of raw entity states that map to this bucket name."}},"ranges":{"type":"array","description":"State-driven preset switching: evaluates entity value against thresholds and applies matching preset","items":{"type":"object","required":["preset"],"properties":{"preset":{"type":"string","description":"Component preset name to apply when this range matches"},"attribute":{"type":"string","description":"Override ranges_attribute for this entry only"},"above":{"type":"number","description":"Match when value is > this threshold (strictly greater)"},"at_least":{"type":"number","description":"Match when value is >= this threshold (inclusive)"},"below":{"type":"number","description":"Match when value is < this threshold (strictly less)"},"at_most":{"type":"number","description":"Match when value is <= this threshold (inclusive)"},"equals":{"description":"Match when value equals this (string comparison)","type":["string","number","boolean"]},"color":{"type":"object","description":"Transient segment colour overrides applied while this range is active","properties":{"shape":{"type":"string","description":"Override fill for the shape segment"},"bars":{"type":"string","description":"Override stroke for the bars segment"}}}},"additionalProperties":false}},"grid_options":{"type":"object","description":"Home Assistant grid layout options. Controls how many rows and columns this card occupies in the dashboard grid.","properties":{"columns":{"oneOf":[{"type":"string","enum":["full"],"description":"Set to \"full\" to span all available columns"},{"type":"number","minimum":1,"maximum":24,"description":"Number of columns this card spans (1-24)"}],"description":"Number of columns (1-24) or \"full\" to span all columns"},"rows":{"type":"number","minimum":1,"maximum":100,"description":"Number of rows this card spans (1-100)"}}}},"$defs":{"actionSchema":{"type":"object","description":"Action to perform on interaction (tap, hold, or double-tap). Supports toggle, service calls, navigation, more-info dialog, or no action.","examples":[{"action":"toggle","entity":"light.living_room"}],"properties":{"action":{"$ref":"#/$defs/lcards_button_tap_action_action"},"service":{"type":"string","pattern":"^[a-z_]+\\.[a-z0-9_]+$","description":"Service to call (format: domain.service)","examples":["light.turn_on"]},"service_data":{"type":"object","description":"Data to pass to the service","examples":[{"brightness":255,"color_name":"red"}]},"data":{"type":"object","description":"Alias for service_data","examples":[{"brightness":255}]},"navigation_path":{"type":"string","pattern":"^/","description":"Path to navigate to (must start with /)","examples":["/lovelace/dashboard"]},"entity":{"type":"string","format":"entity","pattern":"^[a-z_]+\\.[a-z0-9_]+$","description":"Entity ID (format: domain.object_id)","examples":["light.living_room"]},"target":{"type":"object","description":"Service target selector","examples":[{"entity_id":"light.living_room"}]}}},"lcards_button_animations":{"type":"array","items":{"$ref":"../shared/animation.json"}},"lcards_button_svg_segments_default_style":{"type":"object","properties":{"fill":{"$ref":"../shared/state-color.json"},"stroke":{"$ref":"../shared/state-color.json"},"stroke-width":{"$ref":"#/$defs/lcards_button_svg_segments_default_style_stroke_width"},"opacity":{"$ref":"#/$defs/lcards_button_svg_segments_default_style_opacity"}}},"lcards_button_svg_segments_default_style_opacity":{"oneOf":[{"type":"number","minimum":0,"maximum":1,"description":"Opacity value (0.0 = transparent, 1.0 = opaque)"},{"type":"object","description":"State-based opacity","properties":{"default":{"type":"number","minimum":0,"maximum":1},"active":{"type":"number","minimum":0,"maximum":1},"inactive":{"type":"number","minimum":0,"maximum":1}}}]},"lcards_button_svg_segments_default_style_stroke_width":{"title":"Stroke Width","description":"SVG stroke width (number in pixels or CSS string)","oneOf":[{"type":"number","minimum":0,"maximum":50,"description":"Uniform stroke width in pixels (0-50)"},{"type":"string","pattern":"^\\d+(\\.\\d+)?(px|em|rem)?$","description":"CSS stroke width value","examples":["2px"]},{"$ref":"#/$defs/lcards_button_svg_segments_default_style_stroke_width_2"}]},"lcards_button_svg_segments_default_style_stroke_width_2":{"type":"object","description":"State-based stroke width","properties":{"default":{"oneOf":[{"type":"number","minimum":0,"maximum":50},{"type":"string"}]},"active":{"oneOf":[{"type":"number","minimum":0,"maximum":50},{"type":"string"}]},"inactive":{"oneOf":[{"type":"number","minimum":0,"maximum":50},{"type":"string"}]}}},"lcards_button_tap_action_action":{"type":"string","enum":["toggle","call-service","perform-action","navigate","url","more-info","assist","none"],"default":"toggle","description":"Type of action to perform","enumDescriptions":["Toggle entity on/off","Call a Home Assistant service","Navigate to another view/dashboard","Show entity more-info dialog","No action (disabled)"]},"lcards_button_text_default_padding":{"type":"object","title":"Per-Side Padding","description":"Different padding for each side","examples":[{"top":8,"right":16,"bottom":8,"left":16}],"properties":{"top":{"type":"number","minimum":0,"maximum":200,"description":"Top padding in pixels"},"right":{"type":"number","minimum":0,"maximum":200,"description":"Right padding in pixels"},"bottom":{"type":"number","minimum":0,"maximum":200,"description":"Bottom padding in pixels"},"left":{"type":"number","minimum":0,"maximum":200,"description":"Left padding in pixels"}}},"paddingSchema":{"oneOf":[{"type":"number","title":"Uniform Padding","minimum":0,"maximum":200,"description":"Same padding on all sides (in pixels)","examples":[8]},{"$ref":"#/$defs/lcards_button_text_default_padding"}]}}}
