feat: 完善 N7 智能座舱交互与控制链路

This commit is contained in:
vee
2026-09-07 15:34:59 +08:00
parent 32d179143f
commit c96970f068
100 changed files with 30088 additions and 1174 deletions
+90 -66
View File
@@ -1,39 +1,54 @@
:root {
color-scheme: light;
--background: oklch(1 0 0);
--foreground: oklch(0.145 0.008 326);
--card: oklch(1 0 0);
--card-foreground: oklch(0.145 0.008 326);
--popover: oklch(1 0 0);
--popover-foreground: oklch(0.145 0.008 326);
--primary: oklch(0.488 0.243 264.376);
--primary-foreground: oklch(0.97 0.014 254.604);
--secondary: oklch(0.967 0.001 286.375);
--secondary-foreground: oklch(0.21 0.006 285.885);
--muted: oklch(0.96 0.003 325.6);
--muted-foreground: oklch(0.542 0.034 322.5);
--accent: oklch(0.96 0.003 325.6);
--accent-foreground: oklch(0.212 0.019 322.12);
--destructive: oklch(0.577 0.245 27.325);
--border: oklch(0.922 0.005 325.62);
--input: oklch(0.922 0.005 325.62);
--ring: oklch(0.711 0.019 323.02);
--chart-1: oklch(0.828 0.111 230.318);
--chart-2: oklch(0.685 0.169 237.323);
--chart-3: oklch(0.588 0.158 241.966);
--chart-4: oklch(0.5 0.134 242.749);
--chart-5: oklch(0.443 0.11 240.79);
--background: oklch(0.968 0.019 244);
--foreground: oklch(0.29 0.042 252);
--card: oklch(0.993 0.007 245);
--card-foreground: oklch(0.34 0.032 250);
--popover: oklch(0.998 0.004 245);
--popover-foreground: oklch(0.29 0.042 252);
--primary: oklch(0.57 0.19 258);
--primary-foreground: oklch(0.99 0.004 245);
--secondary: oklch(0.94 0.03 244);
--secondary-foreground: oklch(0.38 0.045 250);
--muted: oklch(0.955 0.017 245);
--muted-foreground: oklch(0.53 0.035 248);
--accent: oklch(0.918 0.045 249);
--accent-foreground: oklch(0.38 0.1 258);
--destructive: oklch(0.61 0.19 24);
--border: oklch(0.85 0.04 245);
--input: oklch(0.82 0.045 246);
--ring: oklch(0.65 0.14 256);
--chart-1: oklch(0.76 0.12 225);
--chart-2: oklch(0.66 0.16 247);
--chart-3: oklch(0.64 0.145 165);
--chart-4: oklch(0.72 0.15 78);
--chart-5: oklch(0.61 0.16 298);
--radius: 0.625rem;
--sidebar: oklch(0.985 0 0);
--sidebar-foreground: oklch(0.145 0.008 326);
--sidebar-primary: oklch(0.546 0.245 262.881);
--sidebar-primary-foreground: oklch(0.97 0.014 254.604);
--sidebar-accent: oklch(0.96 0.003 325.6);
--sidebar-accent-foreground: oklch(0.212 0.019 322.12);
--sidebar-border: oklch(0.922 0.005 325.62);
--sidebar-ring: oklch(0.711 0.019 323.02);
--status-online: oklch(0.64 0.18 152);
--status-offline: oklch(0.577 0.245 27.325);
--sidebar: oklch(0.938 0.033 244);
--sidebar-foreground: oklch(0.31 0.04 251);
--sidebar-primary: oklch(0.57 0.19 258);
--sidebar-primary-foreground: oklch(0.99 0.004 245);
--sidebar-accent: oklch(0.902 0.052 248);
--sidebar-accent-foreground: oklch(0.37 0.085 256);
--sidebar-border: oklch(0.83 0.047 245);
--sidebar-ring: oklch(0.65 0.14 256);
--status-online: oklch(0.64 0.145 165);
--status-offline: oklch(0.61 0.19 24);
--status-success: oklch(0.64 0.145 165);
--status-warning: oklch(0.72 0.15 78);
--status-info: var(--primary);
--status-error: var(--destructive);
--heading-foreground: oklch(0.255 0.052 253);
--body-foreground: var(--card-foreground);
--subtle-foreground: var(--muted-foreground);
--status-success-foreground: oklch(0.42 0.115 165);
--status-warning-foreground: oklch(0.46 0.105 76);
--status-info-foreground: oklch(0.42 0.14 258);
--status-error-foreground: oklch(0.48 0.16 24);
--status-success-soft: color-mix(in oklch, var(--status-success) 12%, var(--card));
--status-warning-soft: color-mix(in oklch, var(--status-warning) 12%, var(--card));
--status-info-soft: color-mix(in oklch, var(--status-info) 10%, var(--card));
--status-error-soft: color-mix(in oklch, var(--status-error) 10%, var(--card));
--command-channel: var(--amber);
--command-source: var(--chart-3);
--command-delivered: var(--status-online);
@@ -58,15 +73,15 @@
--teal-soft: color-mix(in oklch, var(--primary) 10%, var(--background));
--blue: var(--primary);
--blue-soft: color-mix(in oklch, var(--primary) 10%, var(--background));
--amber: oklch(0.65 0.17 70);
--amber: var(--status-warning);
--amber-soft: color-mix(in oklch, var(--amber) 12%, var(--background));
--red: var(--destructive);
--red-soft: color-mix(in oklch, var(--destructive) 10%, var(--background));
--shadow: 0 8px 24px oklch(0.145 0.008 326 / 7%);
--shadow: 0 8px 24px oklch(0.29 0.042 252 / 8%);
--accent-bright: color-mix(in oklch, var(--primary) 82%, white);
--accent-ink: var(--primary);
--accent-wash: color-mix(in oklch, var(--primary) 9%, var(--background));
--soft-shadow: 0 18px 50px oklch(0.145 0.008 326 / 9%);
--soft-shadow: 0 18px 50px oklch(0.29 0.042 252 / 10%);
font-family: Inter, "Noto Sans SC", "Microsoft YaHei", system-ui, sans-serif;
color: var(--ink);
background: var(--bg);
@@ -75,39 +90,50 @@
.dark {
color-scheme: dark;
--background: oklch(0.145 0.008 326);
--foreground: oklch(0.985 0 0);
--card: oklch(0.212 0.019 322.12);
--card-foreground: oklch(0.985 0 0);
--popover: oklch(0.212 0.019 322.12);
--popover-foreground: oklch(0.985 0 0);
--primary: oklch(0.424 0.199 265.638);
--primary-foreground: oklch(0.97 0.014 254.604);
--secondary: oklch(0.274 0.006 286.033);
--secondary-foreground: oklch(0.985 0 0);
--muted: oklch(0.263 0.024 320.12);
--muted-foreground: oklch(0.711 0.019 323.02);
--accent: oklch(0.263 0.024 320.12);
--accent-foreground: oklch(0.985 0 0);
--destructive: oklch(0.704 0.191 22.216);
--background: oklch(0.2 0.035 252);
--foreground: oklch(0.94 0.02 245);
--card: oklch(0.25 0.035 251);
--card-foreground: oklch(0.91 0.022 245);
--popover: oklch(0.235 0.038 252);
--popover-foreground: oklch(0.94 0.02 245);
--primary: oklch(0.7 0.15 252);
--primary-foreground: oklch(0.19 0.04 253);
--secondary: oklch(0.285 0.045 250);
--secondary-foreground: oklch(0.92 0.02 245);
--muted: oklch(0.275 0.032 250);
--muted-foreground: oklch(0.72 0.04 245);
--accent: oklch(0.32 0.065 250);
--accent-foreground: oklch(0.91 0.03 244);
--destructive: oklch(0.7 0.18 24);
--border: oklch(1 0 0 / 10%);
--input: oklch(1 0 0 / 15%);
--ring: oklch(0.542 0.034 322.5);
--ring: oklch(0.68 0.13 252);
--chart-1: oklch(0.828 0.111 230.318);
--chart-2: oklch(0.685 0.169 237.323);
--chart-3: oklch(0.588 0.158 241.966);
--chart-4: oklch(0.5 0.134 242.749);
--chart-5: oklch(0.443 0.11 240.79);
--sidebar: oklch(0.212 0.019 322.12);
--sidebar-foreground: oklch(0.985 0 0);
--sidebar-primary: oklch(0.623 0.214 259.815);
--sidebar-primary-foreground: oklch(0.97 0.014 254.604);
--sidebar-accent: oklch(0.263 0.024 320.12);
--sidebar-accent-foreground: oklch(0.985 0 0);
--sidebar: oklch(0.23 0.04 252);
--sidebar-foreground: oklch(0.92 0.02 245);
--sidebar-primary: oklch(0.7 0.15 252);
--sidebar-primary-foreground: oklch(0.19 0.04 253);
--sidebar-accent: oklch(0.3 0.055 250);
--sidebar-accent-foreground: oklch(0.92 0.02 245);
--sidebar-border: oklch(1 0 0 / 10%);
--sidebar-ring: oklch(0.542 0.034 322.5);
--status-online: oklch(0.76 0.18 152);
--status-offline: oklch(0.704 0.191 22.216);
--sidebar-ring: oklch(0.68 0.13 252);
--status-online: oklch(0.74 0.14 165);
--status-offline: oklch(0.72 0.17 24);
--status-success: oklch(0.74 0.14 165);
--status-warning: oklch(0.79 0.14 78);
--status-info: var(--primary);
--status-error: var(--destructive);
--heading-foreground: oklch(0.96 0.018 245);
--body-foreground: var(--card-foreground);
--subtle-foreground: var(--muted-foreground);
--status-success-foreground: oklch(0.82 0.12 165);
--status-warning-foreground: oklch(0.86 0.12 78);
--status-info-foreground: oklch(0.84 0.1 248);
--status-error-foreground: oklch(0.84 0.1 24);
}
html {
@@ -479,7 +505,7 @@ body.mode-editor-open {
.mode-gallery-groups {
min-height: 0;
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
grid-template-columns: minmax(0, 1fr);
align-items: start;
gap: 13px;
padding-right: 4px;
@@ -531,12 +557,10 @@ body.mode-editor-open {
}
.mode-gallery-group > header small {
overflow: hidden;
color: #8a9797;
font-size: 8px;
line-height: 1.3;
text-overflow: ellipsis;
white-space: nowrap;
text-wrap: balance;
}
.mode-gallery-group > header b {
@@ -552,7 +576,7 @@ body.mode-editor-open {
.mode-gallery-grid {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
gap: 7px;
}