Skip to content

Align ingress dashboard styling with Home Assistant theme conventions#109

Merged
DarinShapiro merged 2 commits into
mainfrom
copilot/align-add-on-dashboard-with-ha-design
May 15, 2026
Merged

Align ingress dashboard styling with Home Assistant theme conventions#109
DarinShapiro merged 2 commits into
mainfrom
copilot/align-add-on-dashboard-with-ha-design

Conversation

Copy link
Copy Markdown
Contributor

Copilot AI commented May 15, 2026

This updates the Thread Observability ingress dashboard to better match Home Assistant visual conventions and theme behavior while preserving diagnostic-specific visual semantics. The pass focuses on theme token adoption, component treatment consistency, and documenting intentional custom styling.

  • Theme-token first dashboard shell

    • Replaced core dashboard color primitives with HA-aligned CSS variables (with safe fallbacks), including background, card, text, divider, accent, and status colors.
    • Standardized controls to inherit typography and added consistent :focus-visible treatment for accessibility parity with HA UI expectations.
  • Component treatment alignment

    • Updated chat message surfaces, suggestion chips, identity chip/card, and role pills to use token-driven backgrounds/borders instead of bespoke hardcoded styling.
    • Kept role/status signal colors, but centralized them as named CSS variables to make intent explicit and reuse consistent.
  • Graph theming integration

    • Moved graph legend and Cytoscape style accents to CSS-variable-backed values so graph rendering tracks active theme more directly.
    • Introduced runtime CSS var resolution helper and applied it to role and RSSI color mapping logic.
  • Intentional custom diagnostic language documented

    • Added an ingress styling note in add-on README documenting:
      • which HA tokens are now preferred
      • which diagnostic color cues remain intentionally custom and why
  • Focused regression guard

    • Added a dashboard HTTP test asserting presence of key HA theme tokens in the served dashboard shell.
:root {
  --bg: var(--primary-background-color, #0b1220);
  --panel: var(--ha-card-background, var(--card-background-color, #111a2e));
  --fg: var(--primary-text-color, #e5e7eb);
  --muted: var(--secondary-text-color, #94a3b8);
  --accent: var(--accent-color, #60a5fa);
}

Warning

Firewall rules blocked me from connecting to one or more addresses (expand for details)

I tried to connect to the following addresses, but was blocked by firewall rules:

  • accounts.google.com
    • Triggering command: /proc/self/exe /proc/self/exe --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=network --no-sandbox --use-angle=swiftshader-webgl --crashpad-handler-pid=4637 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/org.chromium.Chromium.scoped_dir.rXl5Ni --change-stack-guard-on-fork=enable --shared-files=network_parent_dirs_pipe:100,v8_context_snapshot_data:101 --field-trial-handle=3,i,14736178787987131100,8616835259433156222,262144 --disable-features=PaintHolding --variations-seed-version --pseudonymization-salt-handle=7,i,7044060192724477723,9079789600546050850,4 --trace-process-track-uuid=3190708989122997041 (dns block)
    • Triggering command: /usr/bin/chromium-browser chromium-browser --headless --disable-gpu --no-sandbox --window-size=1440,1100 --screenshot=/tmp/thread-ui-shots/dashboard-default.png REDACTED (dns block)
    • Triggering command: /proc/self/exe /proc/self/exe --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=network --no-sandbox --use-angle=swiftshader-webgl --crashpad-handler-pid=4771 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/org.chromium.Chromium.scoped_dir.2P3JCI --change-stack-guard-on-fork=enable --shared-files=network_parent_dirs_pipe:100,v8_context_snapshot_data:101 --field-trial-handle=3,i,4946763282611281882,15073641984769425158,262144 --disable-features=PaintHolding --variations-seed-version --pseudonymization-salt-handle=7,i,11454942092874713467,7264609479286410731,4 --trace-process-track-uuid=3190708989122997041 (dns block)
  • clients2.google.com
    • Triggering command: /proc/self/exe /proc/self/exe --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=network --no-sandbox --use-angle=swiftshader-webgl --crashpad-handler-pid=4637 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/org.chromium.Chromium.scoped_dir.rXl5Ni --change-stack-guard-on-fork=enable --shared-files=network_parent_dirs_pipe:100,v8_context_snapshot_data:101 --field-trial-handle=3,i,14736178787987131100,8616835259433156222,262144 --disable-features=PaintHolding --variations-seed-version --pseudonymization-salt-handle=7,i,7044060192724477723,9079789600546050850,4 --trace-process-track-uuid=3190708989122997041 (dns block)
    • Triggering command: /usr/bin/chromium-browser chromium-browser --headless --disable-gpu --no-sandbox --window-size=1440,1100 --screenshot=/tmp/thread-ui-shots/dashboard-default.png REDACTED (dns block)
    • Triggering command: /proc/self/exe /proc/self/exe --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=network --no-sandbox --use-angle=swiftshader-webgl --crashpad-handler-pid=4771 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/org.chromium.Chromium.scoped_dir.2P3JCI --change-stack-guard-on-fork=enable --shared-files=network_parent_dirs_pipe:100,v8_context_snapshot_data:101 --field-trial-handle=3,i,4946763282611281882,15073641984769425158,262144 --disable-features=PaintHolding --variations-seed-version --pseudonymization-salt-handle=7,i,11454942092874713467,7264609479286410731,4 --trace-process-track-uuid=3190708989122997041 (dns block)
  • content-autofill.googleapis.com
    • Triggering command: /proc/self/exe /proc/self/exe --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=network --no-sandbox --use-angle=swiftshader-webgl --crashpad-handler-pid=4637 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/org.chromium.Chromium.scoped_dir.rXl5Ni --change-stack-guard-on-fork=enable --shared-files=network_parent_dirs_pipe:100,v8_context_snapshot_data:101 --field-trial-handle=3,i,14736178787987131100,8616835259433156222,262144 --disable-features=PaintHolding --variations-seed-version --pseudonymization-salt-handle=7,i,7044060192724477723,9079789600546050850,4 --trace-process-track-uuid=3190708989122997041 (dns block)
    • Triggering command: /usr/bin/chromium-browser chromium-browser --headless --disable-gpu --no-sandbox --window-size=1440,1100 --screenshot=/tmp/thread-ui-shots/dashboard-default.png REDACTED (dns block)
    • Triggering command: /proc/self/exe /proc/self/exe --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=network --no-sandbox --use-angle=swiftshader-webgl --crashpad-handler-pid=5164 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/org.chromium.Chromium.scoped_dir.XeFF9p --change-stack-guard-on-fork=enable --shared-files=network_parent_dirs_pipe:100,v8_context_snapshot_data:101 --field-trial-handle=3,i,8711777840531554538,9770437248529053640,262144 --disable-features=PaintHolding --variations-seed-version --pseudonymization-salt-handle=7,i,7490611237049363516,11983942301564416687,4 --trace-process-track-uuid=3190708989122997041 (dns block)
  • core-openthread-border-router
    • Triggering command: /home/REDACTED/.local/bin/pytest pytest addons/thread-observability/app/tests -q (dns block)
    • Triggering command: /usr/bin/python python -m uvicorn thread_observability.api.http_api:create_core_app --factory --host 127.0.0.1 --port 8099 (dns block)
    • Triggering command: /home/REDACTED/.local/bin/pytest pytest addons/thread-observability/app/tests -q --disable-default-apps --disable-dev-shm-usage --disable-features=AcceptCHFrame,AvoidUnnecessaryBeforeUnloadCheckSync,DestroyProfileOnBrowserClose,DialMediaRouteProvider,GlobalMediaControls,HttpsUpgrades,LensOverlay,MediaRo--disable-REDACTED-timer-throttling (dns block)
  • core-openthread-border-router.local.hass.io
    • Triggering command: /usr/bin/python python -m uvicorn thread_observability.api.http_api:create_core_app --factory --host 127.0.0.1 --port 8099 (dns block)
  • otbr
    • Triggering command: /usr/bin/python python -m uvicorn thread_observability.api.http_api:create_core_app --factory --host 127.0.0.1 --port 8099 (dns block)
  • redirector.gvt1.com
    • Triggering command: /proc/self/exe /proc/self/exe --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=network --no-sandbox --use-angle=swiftshader-webgl --crashpad-handler-pid=4637 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/org.chromium.Chromium.scoped_dir.rXl5Ni --change-stack-guard-on-fork=enable --shared-files=network_parent_dirs_pipe:100,v8_context_snapshot_data:101 --field-trial-handle=3,i,14736178787987131100,8616835259433156222,262144 --disable-features=PaintHolding --variations-seed-version --pseudonymization-salt-handle=7,i,7044060192724477723,9079789600546050850,4 --trace-process-track-uuid=3190708989122997041 (dns block)
    • Triggering command: /usr/bin/chromium-browser chromium-browser --headless --disable-gpu --no-sandbox --window-size=1440,1100 --screenshot=/tmp/thread-ui-shots/dashboard-default.png REDACTED (dns block)
    • Triggering command: /proc/self/exe /proc/self/exe --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=network --no-sandbox --use-angle=swiftshader-webgl --crashpad-handler-pid=4771 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/org.chromium.Chromium.scoped_dir.2P3JCI --change-stack-guard-on-fork=enable --shared-files=network_parent_dirs_pipe:100,v8_context_snapshot_data:101 --field-trial-handle=3,i,4946763282611281882,15073641984769425158,262144 --disable-features=PaintHolding --variations-seed-version --pseudonymization-salt-handle=7,i,11454942092874713467,7264609479286410731,4 --trace-process-track-uuid=3190708989122997041 (dns block)
  • supervisor
    • Triggering command: /home/REDACTED/.local/bin/pytest pytest addons/thread-observability/app/tests -q (dns block)
    • Triggering command: /usr/bin/python python -m uvicorn thread_observability.api.http_api:create_core_app --factory --host 127.0.0.1 --port 8099 (dns block)
    • Triggering command: /home/REDACTED/.local/bin/pytest pytest addons/thread-observability/app/tests -q --disable-default-apps --disable-dev-shm-usage --disable-features=AcceptCHFrame,AvoidUnnecessaryBeforeUnloadCheckSync,DestroyProfileOnBrowserClose,DialMediaRouteProvider,GlobalMediaControls,HttpsUpgrades,LensOverlay,MediaRo--disable-REDACTED-timer-throttling (dns block)
  • unpkg.com
    • Triggering command: /proc/self/exe /proc/self/exe --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=network --no-sandbox --use-angle=swiftshader-webgl --crashpad-handler-pid=4637 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/org.chromium.Chromium.scoped_dir.rXl5Ni --change-stack-guard-on-fork=enable --shared-files=network_parent_dirs_pipe:100,v8_context_snapshot_data:101 --field-trial-handle=3,i,14736178787987131100,8616835259433156222,262144 --disable-features=PaintHolding --variations-seed-version --pseudonymization-salt-handle=7,i,7044060192724477723,9079789600546050850,4 --trace-process-track-uuid=3190708989122997041 (dns block)
    • Triggering command: /usr/bin/chromium-browser chromium-browser --headless --disable-gpu --no-sandbox --window-size=1440,1100 --screenshot=/tmp/thread-ui-shots/dashboard-default.png REDACTED (dns block)
    • Triggering command: /proc/self/exe /proc/self/exe --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=network --no-sandbox --use-angle=swiftshader-webgl --crashpad-handler-pid=4771 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/org.chromium.Chromium.scoped_dir.2P3JCI --change-stack-guard-on-fork=enable --shared-files=network_parent_dirs_pipe:100,v8_context_snapshot_data:101 --field-trial-handle=3,i,4946763282611281882,15073641984769425158,262144 --disable-features=PaintHolding --variations-seed-version --pseudonymization-salt-handle=7,i,11454942092874713467,7264609479286410731,4 --trace-process-track-uuid=3190708989122997041 (dns block)
  • www.google.com
    • Triggering command: /proc/self/exe /proc/self/exe --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=network --no-sandbox --use-angle=swiftshader-webgl --crashpad-handler-pid=4637 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/org.chromium.Chromium.scoped_dir.rXl5Ni --change-stack-guard-on-fork=enable --shared-files=network_parent_dirs_pipe:100,v8_context_snapshot_data:101 --field-trial-handle=3,i,14736178787987131100,8616835259433156222,262144 --disable-features=PaintHolding --variations-seed-version --pseudonymization-salt-handle=7,i,7044060192724477723,9079789600546050850,4 --trace-process-track-uuid=3190708989122997041 (dns block)
    • Triggering command: /usr/bin/chromium-browser chromium-browser --headless --disable-gpu --no-sandbox --window-size=1440,1100 --screenshot=/tmp/thread-ui-shots/dashboard-default.png REDACTED (dns block)
    • Triggering command: /proc/self/exe /proc/self/exe --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=network --no-sandbox --use-angle=swiftshader-webgl --crashpad-handler-pid=4771 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/org.chromium.Chromium.scoped_dir.2P3JCI --change-stack-guard-on-fork=enable --shared-files=network_parent_dirs_pipe:100,v8_context_snapshot_data:101 --field-trial-handle=3,i,4946763282611281882,15073641984769425158,262144 --disable-features=PaintHolding --variations-seed-version --pseudonymization-salt-handle=7,i,11454942092874713467,7264609479286410731,4 --trace-process-track-uuid=3190708989122997041 (dns block)

If you need me to access, download, or install something from one of these locations, you can either:

Copilot AI changed the title [WIP] Align add-on dashboard with Home Assistant design conventions Align ingress dashboard styling with Home Assistant theme conventions May 15, 2026
Copilot AI requested a review from DarinShapiro May 15, 2026 21:18
@DarinShapiro DarinShapiro marked this pull request as ready for review May 15, 2026 21:38
@DarinShapiro DarinShapiro merged commit f34d3ea into main May 15, 2026
3 of 5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

UI/UX: Align add-on dashboard with Home Assistant design conventions and theming

2 participants