306 lines
13 KiB
YAML
306 lines
13 KiB
YAML
|
|
# CubeCraft Creations display system — Home Assistant theme
|
||
|
|
#
|
||
|
|
# Source of truth for the tokens below is the production card's stylesheet:
|
||
|
|
# custom_components/cubecraft_production/www/cubecraft-production-card.js
|
||
|
|
# Keep the two in sync. The card reads HA theme variables for its surfaces, so
|
||
|
|
# once this theme is active the CubeOps board and the rest of a dashboard end up
|
||
|
|
# on the same surfaces, borders and text colours automatically.
|
||
|
|
#
|
||
|
|
# The theme carries `modes:`, so it follows HA's light/dark setting. The brand
|
||
|
|
# gradient, type, radii and semantic colours are identical in both modes; only
|
||
|
|
# the surface and text ramps flip.
|
||
|
|
#
|
||
|
|
# TUNED FOR WALL PANELS: `header-height: 0px` near the bottom collapses the HA
|
||
|
|
# toolbar, matching what dakboard-dark did on these dashboards. If you ever want
|
||
|
|
# CubeCraft on a phone or desktop where you still need the toolbar, copy this
|
||
|
|
# file to themes/cubecraft-desktop.yaml, rename the top-level key, and delete
|
||
|
|
# that one line. (HA themes cannot inherit from each other, and this repo's YAML
|
||
|
|
# is loaded by HA's own loader, so a `<<:` merge anchor is not worth the risk of
|
||
|
|
# taking the whole themes include down.)
|
||
|
|
#
|
||
|
|
# Hiding the sidebar as well needs the kiosk-mode frontend plugin (HACS), which
|
||
|
|
# is not currently installed — see dashboards/views/cubeops-dashboard.yaml.
|
||
|
|
|
||
|
|
cubecraft:
|
||
|
|
# ─────────────────────────────────────────────────────────────────────────
|
||
|
|
# Brand tokens — mirrors the `:host` block in cubecraft-production-card.js.
|
||
|
|
# Exposed as --cc-* so dashboard card_mod blocks can reference them by name
|
||
|
|
# instead of hard-coding hexes in a dozen places.
|
||
|
|
# ─────────────────────────────────────────────────────────────────────────
|
||
|
|
cc-blue: "#3B3AB8"
|
||
|
|
cc-purple: "#A035CC"
|
||
|
|
cc-gradient: "linear-gradient(135deg, #3B3AB8 0%, #A035CC 100%)"
|
||
|
|
|
||
|
|
cc-primary-50: "#EBEBF8"
|
||
|
|
cc-primary-500: "#3B3AB8"
|
||
|
|
cc-primary-700: "#201F7A"
|
||
|
|
|
||
|
|
cc-neutral-0: "#FFFFFF"
|
||
|
|
cc-neutral-50: "#FAFAFA"
|
||
|
|
cc-neutral-100: "#F4F4F6"
|
||
|
|
cc-neutral-150: "#EDEDF1"
|
||
|
|
cc-neutral-200: "#E4E4EA"
|
||
|
|
cc-neutral-400: "#9898A8"
|
||
|
|
cc-neutral-600: "#52525E"
|
||
|
|
cc-neutral-900: "#18181D"
|
||
|
|
|
||
|
|
cc-success: "#16A34A"
|
||
|
|
cc-warning: "#D97706"
|
||
|
|
cc-warning-bg: "#FEF3C7"
|
||
|
|
cc-error: "#DC2626"
|
||
|
|
cc-error-bg: "#FEE2E2"
|
||
|
|
|
||
|
|
# 4px spacing scale
|
||
|
|
cc-space-1: "4px"
|
||
|
|
cc-space-2: "8px"
|
||
|
|
cc-space-3: "12px"
|
||
|
|
cc-space-4: "16px"
|
||
|
|
cc-space-5: "20px"
|
||
|
|
cc-space-6: "24px"
|
||
|
|
cc-space-7: "28px"
|
||
|
|
|
||
|
|
cc-radius-sm: "6px"
|
||
|
|
cc-radius-md: "8px"
|
||
|
|
cc-radius-lg: "12px"
|
||
|
|
cc-radius-xl: "16px"
|
||
|
|
cc-radius-brand: "20px"
|
||
|
|
cc-radius-full: "9999px"
|
||
|
|
|
||
|
|
cc-shadow-sm: "0 2px 6px 0 rgba(0,0,0,.08)"
|
||
|
|
cc-shadow-md: "0 4px 12px 0 rgba(0,0,0,.10)"
|
||
|
|
cc-shadow-brand: "0 4px 20px 0 rgba(59,58,184,.25)"
|
||
|
|
|
||
|
|
cc-ease: "cubic-bezier(0,0,.2,1)"
|
||
|
|
cc-dur: "200ms"
|
||
|
|
|
||
|
|
# ─────────────────────────────────────────────────────────────────────────
|
||
|
|
# Typography — Nunito 400..800.
|
||
|
|
# The @font-face has to be declared in the document, not a shadow root; that
|
||
|
|
# is what www/cubecraft/cubecraft-brand-font.js does (wired up via
|
||
|
|
# frontend.extra_module_url in configuration.yaml). Without it everything
|
||
|
|
# below falls back to system-ui and the rest of the theme still works.
|
||
|
|
# ─────────────────────────────────────────────────────────────────────────
|
||
|
|
cc-font: "'Nunito', 'Nunito Fallback', system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif"
|
||
|
|
primary-font-family: "var(--cc-font)"
|
||
|
|
ha-font-family-body: "var(--cc-font)"
|
||
|
|
ha-font-family-heading: "var(--cc-font)"
|
||
|
|
mdc-typography-font-family: "var(--cc-font)"
|
||
|
|
paper-font-common-base_-_font-family: "var(--cc-font)"
|
||
|
|
paper-font-common-nowrap_-_font-family: "var(--cc-font)"
|
||
|
|
paper-font-body1_-_font-family: "var(--cc-font)"
|
||
|
|
paper-font-subhead_-_font-family: "var(--cc-font)"
|
||
|
|
paper-font-headline_-_font-family: "var(--cc-font)"
|
||
|
|
paper-font-title_-_font-family: "var(--cc-font)"
|
||
|
|
paper-font-caption_-_font-family: "var(--cc-font)"
|
||
|
|
|
||
|
|
# ─────────────────────────────────────────────────────────────────────────
|
||
|
|
# Shape — brand radius on cards, pills on controls.
|
||
|
|
# ─────────────────────────────────────────────────────────────────────────
|
||
|
|
ha-card-border-radius: "var(--cc-radius-brand)"
|
||
|
|
ha-card-border-width: "0"
|
||
|
|
ha-dialog-border-radius: "var(--cc-radius-brand)"
|
||
|
|
ha-badge-border-radius: "var(--cc-radius-full)"
|
||
|
|
mdc-shape-small: "var(--cc-radius-full)"
|
||
|
|
mdc-shape-medium: "var(--cc-radius-lg)"
|
||
|
|
mdc-shape-large: "var(--cc-radius-xl)"
|
||
|
|
button-border-radius: "var(--cc-radius-full)"
|
||
|
|
|
||
|
|
# ─────────────────────────────────────────────────────────────────────────
|
||
|
|
# Colour — brand ramp. Surfaces/text live in the mode blocks below.
|
||
|
|
# ─────────────────────────────────────────────────────────────────────────
|
||
|
|
success-color: "var(--cc-success)"
|
||
|
|
warning-color: "var(--cc-warning)"
|
||
|
|
error-color: "var(--cc-error)"
|
||
|
|
|
||
|
|
label-badge-green: "var(--cc-success)"
|
||
|
|
label-badge-yellow: "var(--cc-warning)"
|
||
|
|
label-badge-red: "var(--cc-error)"
|
||
|
|
|
||
|
|
# Text sitting on top of primary-color (buttons, selected states). White
|
||
|
|
# clears AA against both ends of the gradient (8.5:1 on the blue, 5.4:1 on
|
||
|
|
# the purple), so it is safe wherever the gradient is used.
|
||
|
|
text-primary-color: "#FFFFFF"
|
||
|
|
app-header-text-color: "#FFFFFF"
|
||
|
|
mdc-theme-on-primary: "#FFFFFF"
|
||
|
|
|
||
|
|
# Wall-panel chrome: collapse the HA toolbar. Delete this line for a variant
|
||
|
|
# you navigate by hand (see the header comment).
|
||
|
|
header-height: "0px"
|
||
|
|
|
||
|
|
modes:
|
||
|
|
# ═══════════════════════════════════════════════════════════════════════
|
||
|
|
# Light — the design system as authored: white surfaces, neutral sunken
|
||
|
|
# backgrounds, near-black text.
|
||
|
|
# ═══════════════════════════════════════════════════════════════════════
|
||
|
|
light:
|
||
|
|
cc-surface: "var(--cc-neutral-0)"
|
||
|
|
cc-surface-sunken: "var(--cc-neutral-100)"
|
||
|
|
cc-text: "var(--cc-neutral-900)"
|
||
|
|
cc-text-muted: "var(--cc-neutral-600)"
|
||
|
|
cc-border: "var(--cc-neutral-150)"
|
||
|
|
cc-accent: "var(--cc-primary-500)"
|
||
|
|
cc-accent-soft: "var(--cc-primary-50)"
|
||
|
|
|
||
|
|
primary-color: "#3B3AB8"
|
||
|
|
accent-color: "#A035CC"
|
||
|
|
dark-primary-color: "#201F7A"
|
||
|
|
light-primary-color: "#EBEBF8"
|
||
|
|
info-color: "#3B3AB8"
|
||
|
|
|
||
|
|
primary-text-color: "#18181D"
|
||
|
|
secondary-text-color: "#52525E"
|
||
|
|
disabled-text-color: "#9898A8"
|
||
|
|
|
||
|
|
primary-background-color: "#F4F4F6"
|
||
|
|
secondary-background-color: "#EDEDF1"
|
||
|
|
card-background-color: "#FFFFFF"
|
||
|
|
ha-card-background: "#FFFFFF"
|
||
|
|
divider-color: "#EDEDF1"
|
||
|
|
ha-card-box-shadow: "0 4px 12px 0 rgba(0,0,0,.10)"
|
||
|
|
|
||
|
|
app-header-background-color: "#3B3AB8"
|
||
|
|
more-info-header-background: "#F4F4F6"
|
||
|
|
|
||
|
|
sidebar-background-color: "#FFFFFF"
|
||
|
|
sidebar-text-color: "#52525E"
|
||
|
|
sidebar-icon-color: "#9898A8"
|
||
|
|
sidebar-selected-text-color: "#3B3AB8"
|
||
|
|
sidebar-selected-icon-color: "#3B3AB8"
|
||
|
|
|
||
|
|
state-icon-color: "#3B3AB8"
|
||
|
|
state-icon-active-color: "#A035CC"
|
||
|
|
state-unavailable-color: "#9898A8"
|
||
|
|
paper-item-icon-color: "#9898A8"
|
||
|
|
paper-item-icon-active-color: "#3B3AB8"
|
||
|
|
|
||
|
|
switch-checked-color: "#3B3AB8"
|
||
|
|
switch-checked-track-color: "#3B3AB8"
|
||
|
|
switch-unchecked-color: "#9898A8"
|
||
|
|
switch-unchecked-track-color: "#E4E4EA"
|
||
|
|
slider-color: "#3B3AB8"
|
||
|
|
slider-bar-color: "#E4E4EA"
|
||
|
|
|
||
|
|
label-badge-blue: "#3B3AB8"
|
||
|
|
label-badge-gray: "#9898A8"
|
||
|
|
label-badge-text-color: "#18181D"
|
||
|
|
ha-label-badge-background-color: "#FFFFFF"
|
||
|
|
ha-label-badge-border-color: "#EDEDF1"
|
||
|
|
|
||
|
|
table-row-background-color: "#FFFFFF"
|
||
|
|
table-row-alternative-background-color: "#FAFAFA"
|
||
|
|
markdown-code-background-color: "#F4F4F6"
|
||
|
|
code-editor-background-color: "#FAFAFA"
|
||
|
|
|
||
|
|
paper-card-background-color: "#FFFFFF"
|
||
|
|
paper-card-header-color: "#18181D"
|
||
|
|
paper-dialog-background-color: "#FFFFFF"
|
||
|
|
paper-listbox-background-color: "#FFFFFF"
|
||
|
|
input-fill-color: "#F4F4F6"
|
||
|
|
input-ink-color: "#18181D"
|
||
|
|
input-label-ink-color: "#52525E"
|
||
|
|
iron-overlay-backdrop-background-color: "rgba(24,24,29,.32)"
|
||
|
|
|
||
|
|
mdc-theme-primary: "#3B3AB8"
|
||
|
|
mdc-theme-secondary: "#A035CC"
|
||
|
|
mdc-theme-surface: "#FFFFFF"
|
||
|
|
|
||
|
|
# Weather glyphs, kept in the brand family rather than default sky blue.
|
||
|
|
weather-icon-sun-color: "#D97706"
|
||
|
|
weather-icon-rain-color: "#3B3AB8"
|
||
|
|
weather-icon-cloud-front-color: "#9898A8"
|
||
|
|
weather-icon-cloud-back-color: "#E4E4EA"
|
||
|
|
weather-icon-moon-color: "#52525E"
|
||
|
|
|
||
|
|
# ═══════════════════════════════════════════════════════════════════════
|
||
|
|
# Dark — violet-tinted neutrals so the brand gradient sits in the same
|
||
|
|
# family as the surfaces rather than floating on plain grey. The primary
|
||
|
|
# is lightened to #8B8AF2 (5.6:1 on the card surface); #3B3AB8 itself is
|
||
|
|
# too dark to read as an accent here, though it stays correct inside the
|
||
|
|
# gradient, which is left untouched.
|
||
|
|
# ═══════════════════════════════════════════════════════════════════════
|
||
|
|
dark:
|
||
|
|
cc-surface: "#1C1C27"
|
||
|
|
cc-surface-sunken: "#16161F"
|
||
|
|
cc-text: "#EDEDF1"
|
||
|
|
cc-text-muted: "#9898A8"
|
||
|
|
cc-border: "#2A2A38"
|
||
|
|
cc-accent: "#8B8AF2"
|
||
|
|
cc-accent-soft: "#252438"
|
||
|
|
|
||
|
|
primary-color: "#8B8AF2"
|
||
|
|
accent-color: "#C77BEE"
|
||
|
|
dark-primary-color: "#3B3AB8"
|
||
|
|
light-primary-color: "#C9C8FA"
|
||
|
|
info-color: "#8B8AF2"
|
||
|
|
|
||
|
|
primary-text-color: "#EDEDF1"
|
||
|
|
secondary-text-color: "#9898A8"
|
||
|
|
disabled-text-color: "#6A6A7C"
|
||
|
|
|
||
|
|
primary-background-color: "#0E0E14"
|
||
|
|
secondary-background-color: "#16161F"
|
||
|
|
card-background-color: "#1C1C27"
|
||
|
|
ha-card-background: "#1C1C27"
|
||
|
|
divider-color: "#2A2A38"
|
||
|
|
ha-card-box-shadow: "0 4px 12px 0 rgba(0,0,0,.45)"
|
||
|
|
|
||
|
|
app-header-background-color: "#16161F"
|
||
|
|
more-info-header-background: "#16161F"
|
||
|
|
|
||
|
|
sidebar-background-color: "#0E0E14"
|
||
|
|
sidebar-text-color: "#9898A8"
|
||
|
|
sidebar-icon-color: "#6A6A7C"
|
||
|
|
sidebar-selected-text-color: "#8B8AF2"
|
||
|
|
sidebar-selected-icon-color: "#8B8AF2"
|
||
|
|
|
||
|
|
state-icon-color: "#8B8AF2"
|
||
|
|
state-icon-active-color: "#C77BEE"
|
||
|
|
state-unavailable-color: "#6A6A7C"
|
||
|
|
paper-item-icon-color: "#6A6A7C"
|
||
|
|
paper-item-icon-active-color: "#8B8AF2"
|
||
|
|
|
||
|
|
switch-checked-color: "#8B8AF2"
|
||
|
|
switch-checked-track-color: "#8B8AF2"
|
||
|
|
switch-unchecked-color: "#6A6A7C"
|
||
|
|
switch-unchecked-track-color: "#2A2A38"
|
||
|
|
slider-color: "#8B8AF2"
|
||
|
|
slider-bar-color: "#2A2A38"
|
||
|
|
|
||
|
|
# Semantic colours lifted for dark surfaces; the light-mode values are
|
||
|
|
# too dense to read at a distance on #1C1C27.
|
||
|
|
success-color: "#4ADE80"
|
||
|
|
warning-color: "#FBBF24"
|
||
|
|
error-color: "#F87171"
|
||
|
|
label-badge-green: "#4ADE80"
|
||
|
|
label-badge-yellow: "#FBBF24"
|
||
|
|
label-badge-red: "#F87171"
|
||
|
|
label-badge-blue: "#8B8AF2"
|
||
|
|
label-badge-gray: "#6A6A7C"
|
||
|
|
label-badge-text-color: "#EDEDF1"
|
||
|
|
ha-label-badge-background-color: "#1C1C27"
|
||
|
|
ha-label-badge-border-color: "#2A2A38"
|
||
|
|
|
||
|
|
table-row-background-color: "#1C1C27"
|
||
|
|
table-row-alternative-background-color: "#20202C"
|
||
|
|
markdown-code-background-color: "#252433"
|
||
|
|
code-editor-background-color: "#16161F"
|
||
|
|
|
||
|
|
paper-card-background-color: "#1C1C27"
|
||
|
|
paper-card-header-color: "#EDEDF1"
|
||
|
|
paper-dialog-background-color: "#1C1C27"
|
||
|
|
paper-listbox-background-color: "#1C1C27"
|
||
|
|
input-fill-color: "#252433"
|
||
|
|
input-ink-color: "#EDEDF1"
|
||
|
|
input-label-ink-color: "#9898A8"
|
||
|
|
iron-overlay-backdrop-background-color: "rgba(0,0,0,.6)"
|
||
|
|
|
||
|
|
mdc-theme-primary: "#8B8AF2"
|
||
|
|
mdc-theme-secondary: "#C77BEE"
|
||
|
|
mdc-theme-surface: "#1C1C27"
|
||
|
|
|
||
|
|
weather-icon-sun-color: "#FBBF24"
|
||
|
|
weather-icon-rain-color: "#8B8AF2"
|
||
|
|
weather-icon-cloud-front-color: "#9898A8"
|
||
|
|
weather-icon-cloud-back-color: "#3A3A4A"
|
||
|
|
weather-icon-moon-color: "#C9C8FA"
|