Assessor_2.0/tests/client-info-layout-preview....

1 line
24 KiB
HTML

<!doctype html><html data-theme="dark"><head><meta charset="UTF-8"><title>Synthetic restored Client Info</title></head><body><p>Synthetic restored layout preview · no client data</p><button class="btn" id="theme">Switch theme</button><main><div class="dashboard-page client-command-center"><header class="client-overview-header"><div class="client-overview-identity"><span>Client:</span><strong>Synthetic client</strong></div><div class="client-overview-assessment"><span>Assessment:</span><span>Synthetic timeslot</span></div><label class="client-overview-source"><span>Source:</span><select><option value="all">Scan · All</option><option value="generic">Generic</option></select></label><div class="client-report-actions" aria-label="Assessment reports"><button class="btn" type="button">Management Report</button><button class="btn" type="button">Technical Report</button></div></header><div class="client-overview-main"><section class="client-posture tone-critical" aria-label="Security posture"><svg class="client-posture-connectors" viewBox="0 0 1 1" aria-hidden="true"><path d="M0.0 -24.0 C24.0 -24.0, -24.0 0.0, 0.0 0.0"></path><path d="M0.0 -18.0 C24.0 -18.0, -24.0 0.0, 0.0 0.0"></path><path d="M0.0 -12.0 C24.0 -12.0, -24.0 0.0, 0.0 0.0"></path><path d="M0.0 -6.0 C24.0 -6.0, -24.0 0.0, 0.0 0.0"></path><path d="M0.0 0.0 C24.0 0.0, -24.0 0.0, 0.0 0.0"></path><path d="M0.0 6.0 C24.0 6.0, -24.0 0.0, 0.0 0.0"></path><path d="M0.0 12.0 C24.0 12.0, -24.0 0.0, 0.0 0.0"></path><path d="M0.0 18.0 C24.0 18.0, -24.0 0.0, 0.0 0.0"></path><path d="M0.0 24.0 C24.0 24.0, -24.0 0.0, 0.0 0.0"></path></svg><section class="client-overall" aria-labelledby="client-overall-heading"><div class="client-overall-head"><h2 id="client-overall-heading">Overall Score</h2><button class="btn results-btn client-environment-results-button" type="button" aria-haspopup="dialog" aria-expanded="false" aria-label="Open Overall Score results" title="Open results">Results</button></div><button class="client-overall-ring tone-critical" type="button" aria-label="Open remediation overview in Work. Overall Score: 0"><svg viewBox="0 0 120 120" aria-hidden="true"><circle class="client-overall-ring-track" cx="60" cy="60" r="48" pathLength="100"></circle><path class="client-overall-ring-value" d=""></path></svg><span><span class="client-overall-ring-number"><strong>0</strong><small>/100</small></span><em>ASSESSOR</em></span></button><div class="client-overall-coverage"><span><strong>Assessment Coverage</strong><b>100%</b></span><i><u style="--share: 100%;"></u></i><small>1 / 1 eligible controls assessed</small></div></section><section class="client-domains" aria-labelledby="client-domains-heading"><header><h2 id="client-domains-heading">Security Domains</h2></header><ul><li><div><span class="client-domain-amount-bar" aria-hidden="true"><i style="--share: 0%;"></i></span><span class="client-domain-score tone-unknown" title="Not assessed"><svg class="client-glyph" viewBox="0 0 24 24" aria-hidden="true"><circle cx="12" cy="8" r="4"></circle><path d="M4 21c0-4 3-7 8-7s8 3 8 7"></path></svg></span><span class="client-domain-copy"><strong>Identity &amp; Account Hygiene</strong></span><b title="Deviations">0</b></div></li><li><div><span class="client-domain-amount-bar" aria-hidden="true"><i style="--share: 0%;"></i></span><span class="client-domain-score tone-unknown" title="Not assessed"><svg class="client-glyph" viewBox="0 0 24 24" aria-hidden="true"><path d="M12 2l8 3v6c0 5-3.4 8.5-8 11-4.6-2.5-8-6-8-11V5z"></path><path d="M9 12l2 2 4-5"></path></svg></span><span class="client-domain-copy"><strong>Privilege &amp; Attack Paths</strong></span><b title="Deviations">0</b></div></li><li><div><span class="client-domain-amount-bar" aria-hidden="true"><i style="--share: 0%;"></i></span><span class="client-domain-score tone-unknown" title="Not assessed"><svg class="client-glyph" viewBox="0 0 24 24" aria-hidden="true"><rect x="5" y="10" width="14" height="11"></rect><path d="M8 10V7a4 4 0 0 1 8 0v3M12 14v3"></path></svg></span><span class="client-domain-copy"><strong>Authentication &amp; Access</strong></span><b title="Deviations">0</b></div></li><li><div><span class="client-domain-amount-bar" aria-hidden="true"><i style="--share: 0%;"></i></span><span class="client-domain-score tone-unknown" title="Not assessed"><svg class="client-glyph" viewBox="0 0 24 24" aria-hidden="true"><rect x="4" y="3" width="16" height="7"></rect><rect x="4" y="14" width="16" height="7"></rect><path d="M8 6h.01M8 17h.01M12 6h5M12 17h5"></path></svg></span><span class="client-domain-copy"><strong>AD Infrastructure &amp; PKI</strong></span><b title="Deviations">0</b></div></li><li><div><span class="client-domain-amount-bar" aria-hidden="true"><i style="--share: 0%;"></i></span><span class="client-domain-score tone-unknown" title="Not assessed"><svg class="client-glyph" viewBox="0 0 24 24" aria-hidden="true"><rect x="3" y="4" width="18" height="16"></rect><path d="M9 9l-3 3 3 3M15 9l3 3-3 3M13 8l-2 8"></path></svg></span><span class="client-domain-copy"><strong>System Hardening</strong></span><b title="Deviations">0</b></div></li><li><div><span class="client-domain-amount-bar" aria-hidden="true"><i style="--share: 0%;"></i></span><span class="client-domain-score tone-unknown" title="Not assessed"><svg class="client-glyph" viewBox="0 0 24 24" aria-hidden="true"><path d="M7 3h8l4 4v14H7z"></path><path d="M15 3v5h5M10 12h6M10 16h6"></path></svg></span><span class="client-domain-copy"><strong>GPO &amp; Baseline</strong></span><b title="Deviations">0</b></div></li><li><div><span class="client-domain-amount-bar" aria-hidden="true"><i style="--share: 0%;"></i></span><span class="client-domain-score tone-unknown" title="Not assessed"><svg class="client-glyph" viewBox="0 0 24 24" aria-hidden="true"><path d="M6 19h12a4 4 0 0 0 0-8 6 6 0 0 0-11.5-1.5A4.8 4.8 0 0 0 6 19z"></path></svg></span><span class="client-domain-copy"><strong>Cloud &amp; Applications</strong></span><b title="Deviations">0</b></div></li><li><div><span class="client-domain-amount-bar" aria-hidden="true"><i style="--share: 0%;"></i></span><span class="client-domain-score tone-unknown" title="Not assessed"><svg class="client-glyph" viewBox="0 0 24 24" aria-hidden="true"><path d="M3 20h18M5 17l4-5 3 3 6-9"></path><path d="M18 6h3v3"></path></svg></span><span class="client-domain-copy"><strong>Monitoring &amp; Recovery</strong></span><b title="Deviations">0</b></div></li><li><button type="button"><span class="client-domain-amount-bar" aria-hidden="true"><i style="--share: 100%;"></i></span><span class="client-domain-score tone-critical" title="Pass rate 0%"><em>0</em></span><span class="client-domain-copy"><strong>Unclassified</strong></span><b title="Deviations">1</b></button></li></ul></section></section><aside class="client-priority" aria-labelledby="client-priority-heading"><section class="client-priority-findings"><header><h2 id="client-priority-heading">Data</h2><button class="donut-metric-card donut-metric-card--deviation datahub-reference-knob client-priority-total" type="button" aria-label="Deviations: 1, 100%" aria-pressed="false"><h3 class="donut-metric-card__title">Deviations</h3><div class="donut-metric-card__plot"><svg viewBox="0 0 120 120" aria-hidden="true"><circle class="donut-metric-card__track" cx="60" cy="60" r="48" pathLength="100"></circle><path class="donut-metric-card__progress" d="M 114 60 A 54 54 0 0 1 6 60 A 54 54 0 0 1 114 60 L 102 60 A 42 42 0 0 0 18 60 A 42 42 0 0 0 102 60 Z"></path></svg><div class="donut-metric-card__values"><div class="donut-metric-card__primary"><strong>1</strong></div><small>100%</small></div></div></button></header><div class="client-priority-context" aria-label="Additional result states"><button type="button" disabled=""><strong>0</strong><span>Passed</span></button><button type="button" disabled=""><strong>0</strong><span>Not configured</span></button><button type="button" disabled=""><strong>0</strong><span>Duplicates</span></button><button type="button" disabled=""><strong>0</strong><span>Conflicts</span></button><button type="button" disabled=""><strong>0</strong><span>Gaps</span></button></div><section class="client-data-facts" aria-label="Environment facts"><button class="client-data-fact" type="button" aria-haspopup="dialog" aria-expanded="false" aria-label="Open AD Domains results" title="Open results"><svg class="client-glyph" viewBox="0 0 24 24" aria-hidden="true"><path d="M4 21V7h6v14M14 21V3h6v18M2 21h20"></path><path d="M7 10h.01M7 14h.01M17 7h.01M17 11h.01"></path></svg><span><strong>2</strong><small>AD Domains</small></span></button><button class="client-data-fact" type="button" aria-haspopup="dialog" aria-expanded="false" aria-label="Open Entra Tenant results" title="Open results"><svg class="client-glyph" viewBox="0 0 24 24" aria-hidden="true"><path d="M6 19h12a4 4 0 0 0 0-8 6 6 0 0 0-11.5-1.5A4.8 4.8 0 0 0 6 19z"></path></svg><span><strong>1</strong><small>Entra Tenant</small></span></button><button class="client-data-fact" type="button" aria-haspopup="dialog" aria-expanded="false" aria-label="Open User Accounts results" title="Open results"><svg class="client-glyph" viewBox="0 0 24 24" aria-hidden="true"><circle cx="12" cy="8" r="4"></circle><path d="M4 21c0-4 3-7 8-7s8 3 8 7"></path></svg><span><strong>—</strong><small>User Accounts</small></span></button><button class="client-data-fact" type="button" aria-haspopup="dialog" aria-expanded="false" aria-label="Open Computer Objects results" title="Open results"><svg class="client-glyph" viewBox="0 0 24 24" aria-hidden="true"><rect x="3" y="4" width="18" height="13"></rect><path d="M8 21h8M12 17v4"></path></svg><span><strong>—</strong><small>Computer Objects</small></span></button><button class="client-data-fact" type="button" aria-haspopup="dialog" aria-expanded="false" aria-label="Open Domain Controllers results" title="Open results"><svg class="client-glyph" viewBox="0 0 24 24" aria-hidden="true"><rect x="4" y="3" width="16" height="7"></rect><rect x="4" y="14" width="16" height="7"></rect><path d="M8 6h.01M8 17h.01M12 6h5M12 17h5"></path></svg><span><strong>3</strong><small>Domain Controllers</small></span></button><button class="client-data-fact" type="button" aria-haspopup="dialog" aria-expanded="false" aria-label="Open GPOs results" title="Open results"><svg class="client-glyph" viewBox="0 0 24 24" aria-hidden="true"><path d="M7 3h8l4 4v14H7z"></path><path d="M15 3v5h5M10 12h6M10 16h6"></path></svg><span><strong>—</strong><small>GPOs</small></span></button></section></section><section class="client-domain-information" aria-labelledby="client-domain-information-heading"><header class="client-env-group-header"><h2 id="client-domain-information-heading">Domain Information</h2><button class="btn results-btn client-environment-results-button" type="button" aria-haspopup="dialog" aria-expanded="false" aria-label="Open Domain Information results" title="Open results">Results</button></header><dl><div><dt>Domain</dt><dd>synthetic.example</dd></div><div><dt>NetBIOS name</dt><dd>SYNTHETIC</dd></div><div><dt>Forest</dt><dd>synthetic.forest</dd></div><div><dt>Domain functional level</dt><dd>Domain level</dd></div><div><dt>Forest functional level</dt><dd>Forest level</dd></div><div><dt>DC OS</dt><dd>—</dd></div><div><dt>Schema version</dt><dd>Windows Server 2019</dd></div><div><dt>Domain created</dt><dd>2001-03-08</dd></div><div><dt>Entra ID</dt><dd>Synthetic tenant</dd></div></dl></section></aside></div><section class="context-heatmap" aria-labelledby="_r_0_-title"><header class="context-heatmap__header"><div><h2 id="_r_0_-title">Context heatmap</h2><p>Selected timeslot · All sources</p></div><div class="context-heatmap__overview"><span class="context-heatmap__total">Findings: 31</span><ul class="context-heatmap__legend" aria-label="Category severity legend"><li data-severity="critical"><i aria-hidden="true"></i>Critical</li><li data-severity="high"><i aria-hidden="true"></i>High</li><li data-severity="medium"><i aria-hidden="true"></i>Medium</li><li><i aria-hidden="true"></i>No evidence / undetermined</li></ul></div></header><div class="context-heatmap__grid" aria-label="Context clusters"><button type="button" class="context-heatmap__cell" data-cluster="cloud-privileged-access-exposure" data-severity="critical" aria-label="Open Cloud Privileged Access Exposure findings in Work (2)"><span class="context-heatmap__category">Base Severity · Critical</span><strong>Cloud Privileged Access Exposure</strong><span class="context-heatmap__amount">2 findings</span></button><button type="button" class="context-heatmap__cell" data-cluster="ad-privileged-account-exposure" data-severity="critical" aria-label="Open AD Privileged Account Exposure findings in Work (1)"><span class="context-heatmap__category">Base Severity · Critical</span><strong>AD Privileged Account Exposure</strong><span class="context-heatmap__amount">1 finding</span></button><button type="button" class="context-heatmap__cell" data-cluster="adcs-escalation" data-severity="critical" aria-label="Open AD CS Escalation findings in Work (3)"><span class="context-heatmap__category">Base Severity · Critical</span><strong>AD CS Escalation</strong><span class="context-heatmap__amount">3 findings</span></button><button type="button" class="context-heatmap__cell" data-cluster="cloud-sign-in-protection-gaps" data-severity="high" aria-label="Open Cloud Sign-in Protection Gaps findings in Work (3)"><span class="context-heatmap__category">Base Severity · High</span><strong>Cloud Sign-in Protection Gaps</strong><span class="context-heatmap__amount">3 findings</span></button><button type="button" class="context-heatmap__cell" data-cluster="kerberoasting-exposure" data-severity="high" aria-label="Open Kerberoasting Exposure findings in Work (1)"><span class="context-heatmap__category">Base Severity · High</span><strong>Kerberoasting Exposure</strong><span class="context-heatmap__amount">1 finding</span></button><button type="button" class="context-heatmap__cell" data-cluster="lateral-movement-exposure" data-severity="high" aria-label="Open Lateral Movement Exposure findings in Work (2)"><span class="context-heatmap__category">Base Severity · High</span><strong>Lateral Movement Exposure</strong><span class="context-heatmap__amount">2 findings</span></button><button type="button" class="context-heatmap__cell" data-cluster="detection-blind-spots" data-severity="high" aria-label="Open Detection Blind Spots findings in Work (1)"><span class="context-heatmap__category">Base Severity · High</span><strong>Detection Blind Spots</strong><span class="context-heatmap__amount">1 finding</span></button><button type="button" class="context-heatmap__cell" data-cluster="password-guessing-exposure" data-severity="high" aria-label="Open Password Guessing Exposure findings in Work (2)"><span class="context-heatmap__category">Base Severity · High</span><strong>Password Guessing Exposure</strong><span class="context-heatmap__amount">2 findings</span></button><button type="button" class="context-heatmap__cell" data-cluster="malicious-code-execution-exposure" data-severity="high" aria-label="Open Malicious Code Execution Exposure findings in Work (3)"><span class="context-heatmap__category">Base Severity · High</span><strong>Malicious Code Execution Exposure</strong><span class="context-heatmap__amount">3 findings</span></button><button type="button" class="context-heatmap__cell" data-cluster="ad-recovery-gaps" data-severity="high" aria-label="Open AD Recovery Gaps findings in Work (3)"><span class="context-heatmap__category">Base Severity · High</span><strong>AD Recovery Gaps</strong><span class="context-heatmap__amount">3 findings</span></button><button type="button" class="context-heatmap__cell" data-cluster="cloud-app-consent-exposure" data-severity="high" aria-label="Open Cloud App Consent Exposure findings in Work (1)"><span class="context-heatmap__category">Base Severity · High</span><strong>Cloud App Consent Exposure</strong><span class="context-heatmap__amount">1 finding</span></button><button type="button" class="context-heatmap__cell" data-cluster="patch-configuration-drift" data-severity="high" aria-label="Open Patch &amp; Configuration Drift findings in Work (2)"><span class="context-heatmap__category">Base Severity · High</span><strong>Patch &amp; Configuration Drift</strong><span class="context-heatmap__amount">2 findings</span></button><button type="button" class="context-heatmap__cell" data-cluster="ad-reconnaissance-exposure" data-severity="medium" aria-label="Open AD Reconnaissance Exposure findings in Work (2)"><span class="context-heatmap__category">Base Severity · Medium</span><strong>AD Reconnaissance Exposure</strong><span class="context-heatmap__amount">2 findings</span></button><button type="button" class="context-heatmap__cell" data-cluster="data-sharing-exposure" data-severity="medium" aria-label="Open Data Sharing &amp; Privacy Exposure findings in Work (3)"><span class="context-heatmap__category">Base Severity · Medium</span><strong>Data Sharing &amp; Privacy Exposure</strong><span class="context-heatmap__amount">3 findings</span></button><button type="button" class="context-heatmap__cell" data-cluster="physical-local-access-exposure" data-severity="medium" aria-label="Open Physical &amp; Local Access Exposure findings in Work (1)"><span class="context-heatmap__category">Base Severity · Medium</span><strong>Physical &amp; Local Access Exposure</strong><span class="context-heatmap__amount">1 finding</span></button><button type="button" class="context-heatmap__cell" data-cluster="credential-relay-exposure" data-severity="neutral" aria-label="Open Credential Relay Exposure findings in Work (0)"><span class="context-heatmap__category">Base Severity · High</span><strong>Credential Relay Exposure</strong><span class="context-heatmap__amount">0 findings</span></button><button type="button" class="context-heatmap__cell" data-cluster="kerberos-delegation-abuse" data-severity="neutral" aria-label="Open Kerberos Delegation Abuse findings in Work (0)"><span class="context-heatmap__category">Base Severity · Critical</span><strong>Kerberos Delegation Abuse</strong><span class="context-heatmap__amount">0 findings</span></button><button type="button" class="context-heatmap__cell" data-cluster="host-credential-privilege-exposure" data-severity="neutral" aria-label="Open Host Credential &amp; Privilege Exposure findings in Work (0)"><span class="context-heatmap__category">Base Severity · High</span><strong>Host Credential &amp; Privilege Exposure</strong><span class="context-heatmap__amount">0 findings</span></button><button type="button" class="context-heatmap__cell" data-cluster="ad-persistence-indicators" data-severity="neutral" aria-label="Open AD Persistence Indicators findings in Work (0)"><span class="context-heatmap__category">Base Severity · High</span><strong>AD Persistence Indicators</strong><span class="context-heatmap__amount">0 findings</span></button><button type="button" class="context-heatmap__cell" data-cluster="cloud-external-access-exposure" data-severity="neutral" aria-label="Open Cloud External Access Exposure findings in Work (0)"><span class="context-heatmap__category">Base Severity · Medium</span><strong>Cloud External Access Exposure</strong><span class="context-heatmap__amount">0 findings</span></button><button type="button" class="context-heatmap__cell" data-cluster="email-spoofing-phishing-exposure" data-severity="neutral" aria-label="Open Email Spoofing &amp; Phishing Exposure findings in Work (0)"><span class="context-heatmap__category">Base Severity · High</span><strong>Email Spoofing &amp; Phishing Exposure</strong><span class="context-heatmap__amount">0 findings</span></button><button type="button" class="context-heatmap__cell" data-cluster="other-deviations" data-severity="undetermined" aria-label="Open Other Deviations (not yet catalogued) findings in Work (1)"><span class="context-heatmap__category">Base Severity · Undetermined</span><strong>Other Deviations (not yet catalogued)</strong><span class="context-heatmap__amount">1 finding</span></button></div></section><div class="client-environment-grid" aria-label="Environment overview"><section class="client-env-group"><header class="client-env-group-header"><h3 class="client-env-group-title"><svg class="client-glyph" viewBox="0 0 24 24" aria-hidden="true"><path d="M12 2l8 3v6c0 5-3.4 8.5-8 11-4.6-2.5-8-6-8-11V5z"></path><path d="M9 12l2 2 4-5"></path></svg><span>Resilience</span></h3><button class="btn results-btn client-environment-results-button" type="button" aria-haspopup="dialog" aria-expanded="false" aria-label="Open Resilience results" title="Open results">Results</button></header><dl class="client-env-facts"><div><dt>AD Recycle Bin</dt><dd>—</dd></div><div><dt>Last AD backup</dt><dd>—</dd></div><div><dt>krbtgt password</dt><dd>—</dd></div><div><dt>krbtgt version</dt><dd>—</dd></div></dl></section><section class="client-env-group"><header class="client-env-group-header"><h3 class="client-env-group-title"><svg class="client-glyph" viewBox="0 0 24 24" aria-hidden="true"><rect x="3" y="4" width="18" height="13"></rect><path d="M8 21h8M12 17v4"></path></svg><span>Inventory</span></h3><button class="btn results-btn client-environment-results-button" type="button" aria-haspopup="dialog" aria-expanded="false" aria-label="Open Inventory results" title="Open results">Results</button></header><dl class="client-env-facts"><div><dt>Enabled / disabled</dt><dd>— / —</dd></div><div><dt>Password never expires</dt><dd>—</dd></div><div><dt>Admin groups</dt><dd>—</dd></div><div><dt>Trusts</dt><dd>—</dd></div></dl></section><section class="client-env-group"><header class="client-env-group-header"><h3 class="client-env-group-title"><svg class="client-glyph" viewBox="0 0 24 24" aria-hidden="true"><rect x="5" y="10" width="14" height="11"></rect><path d="M8 10V7a4 4 0 0 1 8 0v3M12 14v3"></path></svg><span>Password policy</span></h3><button class="btn results-btn client-environment-results-button" type="button" aria-haspopup="dialog" aria-expanded="false" aria-label="Open Password policy results" title="Open results">Results</button></header><dl class="client-env-facts"><div><dt>Policy</dt><dd>—</dd></div><div><dt>Complexity</dt><dd>—</dd></div><div><dt>Minimum length</dt><dd>—</dd></div><div><dt>History</dt><dd>—</dd></div></dl></section><section class="client-env-group"><header class="client-env-group-header"><h3 class="client-env-group-title"><svg class="client-glyph" viewBox="0 0 24 24" aria-hidden="true"><path d="M7 3h8l4 4v14H7z"></path><path d="M15 3v5h5M10 12h6M10 16h6"></path></svg><span>Certificates &amp; PKI</span></h3><button class="btn results-btn client-environment-results-button" type="button" aria-haspopup="dialog" aria-expanded="false" aria-label="Open Certificates &amp; PKI results" title="Open results">Results</button></header><dl class="client-env-facts"><div><dt>Certificate templates</dt><dd>—</dd></div><div><dt>Certificates</dt><dd>—</dd></div><div><dt>DC certificates</dt><dd>—</dd></div><div><dt>PKI delegations</dt><dd>—</dd></div></dl></section><section class="client-os-inventory" aria-label="Operating systems"><header><h3><svg class="client-glyph" viewBox="0 0 24 24" aria-hidden="true"><rect x="3" y="4" width="18" height="13"></rect><path d="M8 21h8M12 17v4"></path></svg><span>Operating systems</span></h3><button class="btn results-btn client-environment-results-button" type="button" aria-haspopup="dialog" aria-expanded="false" aria-label="Open Operating systems results" title="Open results">Results</button></header><dl class="client-env-facts"><div><dt>Inventory</dt><dd>—</dd></div></dl></section></div><section class="client-risk-register" aria-labelledby="client-risk-register-heading"><div class="client-risk-register-layout"><aside class="client-risk-register-navigation"><header><div><h2 id="client-risk-register-heading">Accepted Risks</h2><span>Risk register</span></div><strong>0 recorded · 0 current</strong></header><nav class="client-risk-register-list" aria-label="Accepted risks"></nav></aside><main class="client-risk-register-information"><p class="client-risk-register-empty">No risk acceptance has been recorded for this assessment.</p></main></div></section></div></main><script type="module">import '@fontsource-variable/inter/wght.css';import '/src/styles/layers.css';import '/src/styles/ui-tokens.css';import '/src/styles/tokens.css';import '/src/styles/base.css';import '/src/styles/components.css';import '/src/styles/datahub.css';import '/src/features/context-layer/context-heatmap.css';document.getElementById('theme').onclick=()=>{document.documentElement.dataset.theme=document.documentElement.dataset.theme==='dark'?'light':'dark';};</script></body></html>