Repository navigation
Dartec Glass, Glass Lite, Soft and Material (v1.3.0) - #3
Merged
Merged
Conversation
The four remaining themes from the approved drafts (#1), in themes/dartec.yaml beside Dartec and Dartec Graphite, which are unchanged. Light and dark in full, theme variables only. Ported as v1.2.0 ported Dartec and Graphite: the shipped font stack (no Dubai), state-cover-active-color, ink text on the light dark-mode teal, and info, sidebar and code-editor colours set to match. Light warning is #c96e05 in Glass, Glass Lite and Material: the drafts' #d97706 was below 3:1 on their cards. contrast.py now measures gradient grounds and glass cards (worst case over every colour of lovelace-background, with a translucent card blended over it, and the solid dialog surface): 252 of 252 pairs pass WCAG AA, with Dartec's and Graphite's 84 figures unchanged. New check_themes.py, run in CI: HA's themes map shape, no duplicate keys, light and dark with the core colours, valid colour values, no card-mod, url(), JavaScript or copper. README lists the six themes and which goes where; new CHANGELOG.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Ships the rest of the owner-approved family in #1: Dartec Glass, Dartec Glass Lite, Dartec Soft and Dartec Material, for v1.3.0. Approved in kaboomAE/dartec-ops#12 (2026-10-05). Dartec and Dartec Graphite are unchanged: their parsed values are identical to v1.2.0 and their 84 contrast figures are the same to the digit.
Not merged and not released here; that is the chief's step after checking.
The four themes
Ported from the approved drafts (kaboomAE/dartec-ha-manager
docs/dashboards/dartec-variants/dartec-variants.yaml) intothemes/dartec.yaml, after Graphite. They stay in the one file because HACS names a theme repository's install folder after one of its YAML files (see #2).ha-card-background+ha-card-backdrop-filter) over a teal gradient ground (lovelace-background); solid top bar and dialogsEach writes light and dark in full and uses theme variables only: no card-mod, no JavaScript, no images, no
url().Where the port differs from the drafts
The same corrections v1.2.0 made to Dartec and Graphite, plus one contrast fix:
'Dartec Lateef', Roboto, Noto, system-ui, sans-serif(code:'Dartec Plex Mono', 'IBM Plex Mono', …). The drafts named'Dartec Dubai'first; Dubai's licence forbids redistribution (R15: serve the brand's Arabic and figure fonts from the agent (Dubai left out: its licence forbids it) dartec-ha-manager#68). Lateef and Plex Mono are what the agent serves since #68.state-cover-active-color(which HA reads) in place of the drafts'state-cover-open-color.text-primary-color) is ink, not HA's default white: Glass#0f1416on#8fd8d2(11.41), Glass Lite#0f1416on#6cc7c0(9.34), Soft#17181aon#4db3ac(7.07), Material#111717on#9bd0cf(10.63).#c96e05in Glass, Glass Lite and Material, the colour Graphite already uses. The drafts'#d97706measured 2.89 (Glass, worst case over the ground), 2.99 (Glass Lite) and 2.75 (Material), below 3:1; the drafts' table did not measure warnings. Now 3.33, 3.45 and 3.17. Soft keeps#d97706(3.13 on paper, as in Dartec).info-color, the sidebar's selected icon and text,dark-primary-color/light-primary-colorand the dark-mode code editor are set to match each theme, as in Dartec and Graphite.Everything else is the draft's values.
Checks
scripts/check_themes.py(new, added to CI): loads as HA's themes map, no duplicate keys, exactlylightanddarkper theme with the 16 core colours each, every colour valid (hex, rgb/rgba ranges, gradients), no card-mod /url()/ JavaScript / copper, names start with "Dartec"scripts/contrast.py(extended)THEME_SCHEMAreplica (voluptuous, fromhomeassistant/components/frontend/__init__.py)I mutation-tested
check_themes.py: a duplicate key, a 5-digit hex, an alpha of 1.8, a channel of 300, aurl(), a missing dark mode, a copper value, an unquoted number and a missing core colour are each caught.What
contrast.pynow measuresGlass draws cards on a gradient, so one background colour no longer describes a card. For every pair on a card or on the page:
lovelace-background(each stop plus ten steps between neighbours) andprimary-background-color;ha-card-backgroundis blended over each colour of that ground;card-background-colorthat dialogs and pop-ups use is measured too;A blur averages the colours behind a card, so the worst single colour is the worst case. Themes without these variables measure exactly as before, which is why Dartec's and Graphite's figures did not move.
Primary text against the card (the 4.5:1 bar)
Lowest secondary text on a card: Glass dark 6.08. Lowest icon/control pair: Material light "light on" 3.04, then Glass dark error 3.11 (bar 3).
Full table for the four new themes (168 pairs)
#1d211c#f0f5f2(worst of 17)#4a4f45#f0f5f2(worst of 17)#1d211c#d7e8e7(worst of 21)#4a4f45#d7e8e7(worst of 21)#22251f#e3ecea#1a6b6b#eef2ee#1a6b6b#f0f5f2(worst of 17)#ffffff#1a6b6b#ffffff#dc2626#1a6b6b#f0f5f2(worst of 17)#1a6b6b#f0f5f2(worst of 17)#1a6b6b#f0f5f2(worst of 17)#1a6b6b#f0f5f2(worst of 17)#8a6a12#f0f5f2(worst of 17)#0f4f4f#f0f5f2(worst of 17)#a88400#f0f5f2(worst of 17)#1a6b6b#f0f5f2(worst of 17)#1a6b6b#f0f5f2(worst of 17)#dc2626#f0f5f2(worst of 17)#c96e05#f0f5f2(worst of 17)#047857#f0f5f2(worst of 17)#f2f0ea#275351(worst of 23)#d6dad4#275351(worst of 23)#f2f0ea#164645(worst of 22)#d6dad4#164645(worst of 22)#f2f0ea#122c2c#8fd8d2#0f1416#8fd8d2#275351(worst of 23)#0f1416#8fd8d2#0f1416#f87171#8fd8d2#275351(worst of 23)#8fd8d2#275351(worst of 23)#8fd8d2#275351(worst of 23)#8fd8d2#275351(worst of 23)#ecd06f#275351(worst of 23)#bdeae6#275351(worst of 23)#fde047#275351(worst of 23)#8fd8d2#275351(worst of 23)#8fd8d2#275351(worst of 23)#f87171#275351(worst of 23)#fbbf24#275351(worst of 23)#34d399#275351(worst of 23)#1d211c#f8f8f3#4a4f45#f8f8f3#1d211c#d7e8e7(worst of 21)#4a4f45#d7e8e7(worst of 21)#22251f#e3ecea#1a6b6b#eef2ee#1a6b6b#f8f8f3#ffffff#1a6b6b#ffffff#dc2626#1a6b6b#f8f8f3#1a6b6b#f8f8f3#1a6b6b#f8f8f3#1a6b6b#f8f8f3#8a6a12#f8f8f3#0f4f4f#f8f8f3#a88400#f8f8f3#1a6b6b#f8f8f3#1a6b6b#f8f8f3#dc2626#f8f8f3#c96e05#f8f8f3#047857#f8f8f3#f2f0ea#23302f#c3c8c2#23302f#f2f0ea#164645(worst of 22)#c3c8c2#164645(worst of 22)#f2f0ea#122c2c#6cc7c0#0f1416#6cc7c0#23302f#0f1416#6cc7c0#0f1416#f87171#6cc7c0#23302f#6cc7c0#23302f#6cc7c0#23302f#6cc7c0#23302f#e3c25a#23302f#a3e0db#23302f#facc15#23302f#6cc7c0#23302f#6cc7c0#23302f#f87171#23302f#fbbf24#23302f#34d399#23302f#22251f#fffdf8#52564c#fffdf8#22251f#f1f0ea#52564c#f1f0ea#22251f#fffdf8#1a6b6b#fffdf8#1a6b6b#fffdf8#ffffff#1a6b6b#ffffff#dc2626#1a6b6b#fffdf8#1a6b6b#fffdf8#1a6b6b#fffdf8#1a6b6b#fffdf8#8a6a12#fffdf8#0f4f4f#fffdf8#a88400#fffdf8#1a6b6b#fffdf8#1a6b6b#fffdf8#dc2626#fffdf8#d97706#fffdf8#047857#fffdf8#e8e6df#232529#aeada4#232529#e8e6df#17181a#aeada4#17181a#e8e6df#1e2024#7fd0c9#1e2024#4db3ac#232529#17181a#4db3ac#17181a#f87171#4db3ac#232529#4db3ac#232529#4db3ac#232529#4db3ac#232529#d9b44a#232529#7fd0c9#232529#facc15#232529#4db3ac#232529#4db3ac#232529#f87171#232529#fbbf24#232529#34d399#232529#1f2828#e7f0ef#4c5757#e7f0ef#1f2828#f6faf9#4c5757#f6faf9#2a3434#e7f0ef#1b6969#eef5f4#1b6969#e7f0ef#ffffff#1b6969#ffffff#a83836#1b6969#e7f0ef#1b6969#e7f0ef#1b6969#e7f0ef#1b6969#e7f0ef#7a5e10#e7f0ef#3a647d#e7f0ef#a88400#e7f0ef#1b6969#e7f0ef#1b6969#e7f0ef#a83836#e7f0ef#c96e05#e7f0ef#047857#e7f0ef#dce8e7#1d2827#a8b3b3#1d2827#dce8e7#111717#a8b3b3#111717#dce8e7#192121#9bd0cf#131b1b#9bd0cf#1d2827#111717#9bd0cf#111717#fa746f#9bd0cf#1d2827#9bd0cf#1d2827#9bd0cf#1d2827#9bd0cf#1d2827#e3c25a#1d2827#d2ecff#1d2827#facc15#1d2827#9bd0cf#1d2827#9bd0cf#1d2827#fa746f#1d2827#fbbf24#1d2827#34d399#1d2827README, CHANGELOG, version
check_themes.py.CHANGELOG.md, with v1.3.0 and the earlier releases from their release notes.hacs.jsonhas no version field and HACS installs the release tag, so v1.3.0 is the tag the release creates. The minimum Home Assistant stays 2025.5.0.Not done here
🤖 Generated with Claude Code