/* Glassmorphism workspace theme ------------------------------------------- Visual direction adapted to the referenced Creative Cloud concept: a colorful desktop backdrop, one dark translucent app shell, restrained separators and low-contrast glass cards. The existing N7 information architecture and interaction contracts remain unchanged. */ body.console-v2 { color-scheme: dark; --background: oklch(0.16 0.045 286); --foreground: oklch(0.97 0.012 274); --card: oklch(0.25 0.045 282 / 0.68); --card-foreground: oklch(0.95 0.018 274); --popover: oklch(0.205 0.048 284 / 0.96); --popover-foreground: oklch(0.97 0.012 274); --primary: oklch(0.68 0.19 270); --primary-foreground: oklch(0.99 0.004 274); --secondary: oklch(0.31 0.05 281 / 0.72); --secondary-foreground: oklch(0.94 0.018 274); --muted: oklch(0.32 0.035 279 / 0.56); --muted-foreground: oklch(0.78 0.035 276); --accent: oklch(0.41 0.105 273 / 0.58); --accent-foreground: oklch(0.98 0.012 274); --destructive: oklch(0.69 0.2 22); --border: oklch(0.9 0.035 276 / 0.16); --input: oklch(0.93 0.025 276 / 0.22); --ring: oklch(0.75 0.14 265); --sidebar: oklch(0.19 0.05 286 / 0.64); --sidebar-foreground: oklch(0.95 0.018 274); --sidebar-primary: var(--primary); --sidebar-primary-foreground: var(--primary-foreground); --sidebar-accent: oklch(0.36 0.08 276 / 0.54); --sidebar-accent-foreground: var(--foreground); --sidebar-border: var(--border); --sidebar-ring: var(--ring); --heading-foreground: oklch(0.99 0.008 274); --body-foreground: var(--card-foreground); --subtle-foreground: var(--muted-foreground); --status-success: oklch(0.77 0.17 158); --status-online: var(--status-success); --status-warning: oklch(0.82 0.16 82); --status-offline: var(--destructive); --status-info: oklch(0.76 0.14 247); --status-success-foreground: oklch(0.86 0.14 158); --status-warning-foreground: oklch(0.9 0.13 84); --status-info-foreground: oklch(0.88 0.1 248); --status-error-foreground: oklch(0.86 0.11 22); --status-success-soft: oklch(0.67 0.14 158 / 0.15); --status-warning-soft: oklch(0.72 0.15 82 / 0.16); --status-info-soft: oklch(0.65 0.15 250 / 0.17); --status-error-soft: oklch(0.66 0.18 22 / 0.16); --bg: var(--background); --surface: var(--card); --surface-muted: var(--muted); --ink: var(--foreground); --line: var(--border); --line-strong: var(--input); --teal: var(--primary); --teal-dark: color-mix(in oklch, var(--primary) 78%, black); --teal-soft: color-mix(in oklch, var(--primary) 16%, transparent); --blue: var(--primary); --blue-soft: color-mix(in oklch, var(--primary) 16%, transparent); --amber: var(--status-warning); --amber-soft: var(--status-warning-soft); --red: var(--destructive); --red-soft: var(--status-error-soft); --accent-bright: color-mix(in oklch, var(--primary) 78%, white); --accent-ink: var(--primary); --accent-wash: color-mix(in oklch, var(--primary) 14%, transparent); --v2-accent: var(--primary); --v2-accent-strong: color-mix(in oklch, var(--primary) 76%, white); --v2-accent-soft: color-mix(in oklch, var(--primary) 14%, transparent); --v2-sidebar: var(--sidebar); --v2-sidebar-deep: oklch(0.15 0.045 287 / 0.72); --v2-ink: var(--foreground); --v2-muted: var(--muted-foreground); --v2-line: var(--border); --v2-surface: var(--card); --v2-canvas: transparent; --glass-shell: oklch(0.14 0.045 286 / 0.62); --glass-panel: oklch(0.19 0.045 284 / 0.56); --glass-card: oklch(0.43 0.04 276 / 0.18); --glass-card-hover: oklch(0.5 0.07 270 / 0.23); --glass-line: oklch(0.96 0.02 274 / 0.15); --glass-line-strong: oklch(0.96 0.025 274 / 0.24); --glass-highlight: oklch(1 0 0 / 0.14); --glass-shadow: 0 24px 70px oklch(0.06 0.04 285 / 0.42); --glass-panel-shadow: 0 12px 32px oklch(0.05 0.035 285 / 0.24); min-width: 1180px; min-height: 620px; overflow: hidden; color: var(--foreground); background: radial-gradient(circle at 8% 12%, oklch(0.69 0.2 232 / 0.82), transparent 31%), radial-gradient(circle at 78% 2%, oklch(0.45 0.22 290 / 0.82), transparent 34%), radial-gradient(circle at 94% 78%, oklch(0.64 0.25 339 / 0.72), transparent 38%), radial-gradient(circle at 18% 96%, oklch(0.49 0.22 22 / 0.58), transparent 35%), linear-gradient(135deg, oklch(0.17 0.075 242), oklch(0.16 0.075 292) 52%, oklch(0.23 0.11 344)); font-family: Inter, "PingFang SC", "Microsoft YaHei", system-ui, sans-serif; } body.console-v2::before, body.console-v2::after { content: ""; position: fixed; z-index: 0; pointer-events: none; border-radius: 999px; filter: blur(44px); opacity: 0.56; } body.console-v2::before { width: 34vw; height: 34vw; top: -18vw; left: 28vw; background: oklch(0.72 0.2 224 / 0.72); } body.console-v2::after { width: 30vw; height: 30vw; right: -10vw; bottom: -16vw; background: oklch(0.67 0.25 334 / 0.68); } body.console-v2 .v2-boot-screen { color: var(--foreground); background: radial-gradient(circle at 50% 42%, color-mix(in oklch, var(--primary) 32%, transparent), transparent 18rem), oklch(0.13 0.04 286); } body.console-v2.assistant-chat-enabled.v2-passive-display.v2-interactive-sync .workspace, body.console-v2.assistant-chat-enabled.v2-passive-display.v2-interactive-sync.assistant-drawer-open .workspace { width: calc(100vw - 28px) !important; height: calc(100dvh - 28px) !important; min-height: 0; position: relative; z-index: 1; margin: 14px !important; overflow: hidden; color: var(--foreground); background: var(--glass-shell) !important; border: 1px solid var(--glass-line-strong); border-radius: 18px; box-shadow: var(--glass-shadow), inset 0 1px 0 var(--glass-highlight); -webkit-backdrop-filter: blur(22px) saturate(1.25); backdrop-filter: blur(22px) saturate(1.25); } body.console-v2.v2-passive-display.v2-interactive-sync .main-panel { min-height: 0; color: var(--foreground); background: transparent !important; } body.console-v2.v2-passive-display.v2-interactive-sync .command-panel.v2-sidebar { height: 100%; color: var(--sidebar-foreground); background: linear-gradient(165deg, oklch(0.22 0.07 284 / 0.38), oklch(0.12 0.04 287 / 0.42)) !important; border-right: 1px solid var(--glass-line); -webkit-backdrop-filter: blur(18px) saturate(1.2); backdrop-filter: blur(18px) saturate(1.2); } /* Header / app navigation ------------------------------------------------ */ body.console-v2.assistant-chat-enabled.v2-passive-display.v2-interactive-sync .main-panel > .v2-mode-rail { color: var(--foreground); background: linear-gradient(110deg, oklch(0.32 0.08 274 / 0.26), transparent 42%), oklch(0.18 0.045 284 / 0.62) !important; border: 1px solid var(--glass-line); border-radius: 14px; box-shadow: inset 0 1px 0 var(--glass-highlight), 0 8px 24px oklch(0.05 0.04 286 / 0.2); -webkit-backdrop-filter: blur(18px) saturate(1.22); backdrop-filter: blur(18px) saturate(1.22); } body.console-v2 .v2-mode-rail .mode-rail-title, body.console-v2 .v2-mode-rail .mode-rail-identity small, body.console-v2 .v2-mode-rail .mode-rail-selection { color: var(--foreground); } body.console-v2 .v2-mode-rail .mode-rail-identity small { color: var(--muted-foreground); } body.console-v2 .v2-mode-rail .mode-rail-mark, body.console-v2 .v2-panel-control-dock > button, body.console-v2 .v2-mode-rail .mode-rail-actions > button, body.console-v2 .v2-mode-rail .mode-rail-toggle { color: var(--muted-foreground) !important; background: var(--glass-card) !important; border-color: var(--glass-line) !important; box-shadow: inset 0 1px 0 var(--glass-highlight) !important; -webkit-backdrop-filter: blur(10px) saturate(1.15); backdrop-filter: blur(10px) saturate(1.15); } body.console-v2 .v2-panel-control-dock > button:is(:hover, :focus-visible, .active), body.console-v2 .v2-mode-rail .mode-rail-actions > button:is(:hover, :focus-visible), body.console-v2 .v2-mode-rail .mode-rail-toggle:is(:hover, :focus-visible) { color: var(--foreground) !important; background: color-mix(in oklch, var(--primary) 58%, transparent) !important; border-color: color-mix(in oklch, var(--primary) 64%, white 18%) !important; box-shadow: 0 7px 18px color-mix(in oklch, var(--primary) 24%, transparent), inset 0 1px 0 oklch(1 0 0 / 0.22) !important; } body.console-v2.v2-passive-display.v2-interactive-sync .v2-mode-rail .mode-chips { background: transparent; } body.console-v2.v2-passive-display.v2-interactive-sync .v2-mode-rail .mode-chips > button { color: var(--muted-foreground) !important; background: transparent !important; border-color: transparent !important; box-shadow: none !important; } body.console-v2.v2-passive-display.v2-interactive-sync .v2-mode-rail .mode-chips > button:is(:hover, :focus-visible) { color: var(--foreground) !important; background: var(--glass-card-hover) !important; border-color: var(--glass-line) !important; } body.console-v2.v2-passive-display.v2-interactive-sync .v2-mode-rail .mode-chips > button::after { background: var(--primary); box-shadow: 0 0 14px color-mix(in oklch, var(--primary) 70%, transparent); } /* Primary glass surfaces ------------------------------------------------- */ body.console-v2.v2-passive-display.v2-interactive-sync :is( #assistantDrawer, .joint-twin-shell > .twin-band, #v2DevicePanel, #v2ExtensionPanel .v2-extension-sync-mount ) { color: var(--card-foreground) !important; background: linear-gradient(145deg, oklch(0.36 0.055 278 / 0.12), transparent 44%), var(--glass-panel) !important; border: 1px solid var(--glass-line) !important; border-radius: 14px !important; box-shadow: var(--glass-panel-shadow), inset 0 1px 0 var(--glass-highlight) !important; -webkit-backdrop-filter: blur(20px) saturate(1.2); backdrop-filter: blur(20px) saturate(1.2); } body.console-v2.assistant-chat-enabled.v2-passive-display.v2-interactive-sync #assistantDrawer .v2-natural-panel { color: var(--card-foreground); background: transparent !important; } body.console-v2 :is( .v2-operation-heading, .joint-twin-shell .twin-heading, .v2-device-sync-board > header, .v2-extension-sync-heading ) { color: var(--foreground) !important; background: oklch(0.17 0.045 285 / 0.38) !important; border-bottom-color: var(--glass-line) !important; } body.console-v2 :is( .v2-operation-heading h2, .joint-twin-shell .twin-heading h3, .joint-twin-shell .twin-heading .section-kicker, .v2-device-sync-board > header h3, .v2-extension-sync-heading h3 ) { color: var(--heading-foreground) !important; } /* Assistant -------------------------------------------------------------- */ body.console-v2 .assistant-message-assistant .assistant-message-content, body.console-v2 .assistant-message-user .assistant-message-content, body.console-v2 .assistant-dispatched-controls { color: var(--card-foreground) !important; background: var(--glass-card) !important; border: 1px solid var(--glass-line) !important; box-shadow: inset 0 1px 0 var(--glass-highlight), 0 8px 20px oklch(0.05 0.035 285 / 0.14) !important; -webkit-backdrop-filter: blur(12px) saturate(1.16); backdrop-filter: blur(12px) saturate(1.16); } body.console-v2 .assistant-avatar { color: var(--primary-foreground) !important; background: linear-gradient(145deg, color-mix(in oklch, var(--primary) 78%, white), var(--primary)) !important; border-color: oklch(1 0 0 / 0.22) !important; box-shadow: 0 8px 20px color-mix(in oklch, var(--primary) 24%, transparent) !important; } body.console-v2.assistant-chat-enabled.v2-passive-display.v2-interactive-sync .v2-request-form .command-composer { color: var(--foreground); background: oklch(0.12 0.035 286 / 0.46) !important; border-color: var(--glass-line-strong) !important; box-shadow: inset 0 1px 0 var(--glass-highlight), 0 10px 24px oklch(0.05 0.04 286 / 0.24) !important; -webkit-backdrop-filter: blur(16px) saturate(1.18); backdrop-filter: blur(16px) saturate(1.18); } body.console-v2.assistant-chat-enabled .v2-request-form #utterance { color: var(--foreground) !important; caret-color: var(--primary); background: transparent !important; } body.console-v2.assistant-chat-enabled .v2-request-form #utterance::placeholder { color: color-mix(in oklch, var(--muted-foreground) 82%, transparent); } body.console-v2 .assistant-drawer-actions :is(.context-reset, .assistant-drawer-close), body.console-v2 .v2-request-form :is(.speech-dictation, .v2-reasoning-trigger) { color: var(--muted-foreground) !important; background: transparent !important; } body.console-v2 .assistant-drawer-actions :is(.context-reset, .assistant-drawer-close):is(:hover, :focus-visible), body.console-v2 .v2-request-form :is(.speech-dictation, .v2-reasoning-trigger):is(:hover, :focus-visible) { color: var(--foreground) !important; background: var(--glass-card-hover) !important; } body.console-v2.assistant-chat-enabled.v2-passive-display.v2-interactive-sync .v2-request-form .primary-action, body.console-v2 .v2-extension-primary, body.console-v2 .mode-editor-primary { color: var(--primary-foreground) !important; background: linear-gradient(135deg, color-mix(in oklch, var(--primary) 78%, white), var(--primary)) !important; border-color: color-mix(in oklch, var(--primary) 72%, white 20%) !important; box-shadow: 0 9px 22px color-mix(in oklch, var(--primary) 28%, transparent), inset 0 1px 0 oklch(1 0 0 / 0.25) !important; } /* Vehicle twin ----------------------------------------------------------- */ body.console-v2.v2-passive-display.v2-interactive-sync .joint-twin-shell[data-open-panels] { color: var(--foreground); background: transparent !important; } body.console-v2.v2-passive-display.v2-interactive-sync .joint-twin-shell .twin-stage { background: radial-gradient(ellipse at 53% 58%, color-mix(in oklch, var(--primary) 25%, transparent), transparent 42%), radial-gradient(circle at 82% 8%, oklch(0.72 0.18 232 / 0.12), transparent 32%), linear-gradient(160deg, oklch(0.18 0.05 285 / 0.2), oklch(0.09 0.03 286 / 0.32)) !important; } body.console-v2 .joint-twin-shell :is(.twin-seat-switch, .twin-seat-switch button, .twin-reset, .twin-focus-badge) { color: var(--muted-foreground) !important; background: var(--glass-card) !important; border-color: var(--glass-line) !important; box-shadow: inset 0 1px 0 var(--glass-highlight) !important; } body.console-v2 .joint-twin-shell .twin-seat-switch button.active, body.console-v2 .joint-twin-shell :is(.twin-reset, .twin-focus-badge):is(:hover, :focus-visible) { color: var(--primary-foreground) !important; background: color-mix(in oklch, var(--primary) 72%, transparent) !important; border-color: color-mix(in oklch, var(--primary) 70%, white 18%) !important; } body.console-v2 .v2-twin-hotspot-label, body.console-v2 .v2-twin-device-popover { color: var(--foreground) !important; background: oklch(0.16 0.045 285 / 0.74) !important; border-color: var(--glass-line-strong) !important; box-shadow: 0 10px 28px oklch(0.04 0.035 286 / 0.32), inset 0 1px 0 var(--glass-highlight) !important; -webkit-backdrop-filter: blur(14px) saturate(1.18); backdrop-filter: blur(14px) saturate(1.18); } /* Reusable cards, fields and side rails --------------------------------- */ body.console-v2 :is( .v2-sync-transport-field, .v2-sync-execution-field, .v2-can-command-panel, .v2-sync-log, .v2-nfc-inline, .v2-extension-gateway, .v2-extension-synced-device, .v2-extension-empty, .v2-pet-card-region, .v2-pet-card, .v2-device-card, .joint-seat-panel, .domain-panel, .coverage-card, .decision-list li, .frame-summary, .execution-summary ) { color: var(--card-foreground) !important; background: var(--glass-card) !important; border-color: var(--glass-line) !important; box-shadow: inset 0 1px 0 var(--glass-highlight), 0 7px 20px oklch(0.05 0.035 286 / 0.15) !important; -webkit-backdrop-filter: blur(13px) saturate(1.16); backdrop-filter: blur(13px) saturate(1.16); } body.console-v2 :is( .v2-nfc-inline, .v2-extension-gateway, .v2-extension-synced-device, .v2-pet-card, .v2-device-card, .joint-seat-panel, .domain-panel ):is(:hover, :focus-within) { background: var(--glass-card-hover) !important; border-color: var(--glass-line-strong) !important; } body.console-v2 .v2-pet-card-region { --pet-acrylic-surface: var(--glass-card); --pet-acrylic-surface-strong: var(--glass-card-hover); --pet-acrylic-border: var(--glass-line); --pet-acrylic-highlight: var(--glass-highlight); } body.console-v2 :is(input, textarea, select), body.console-v2 .v2-pet-nfc-field output { color: var(--foreground) !important; background: oklch(0.11 0.035 286 / 0.42) !important; border-color: var(--glass-line-strong) !important; box-shadow: inset 0 1px 0 oklch(1 0 0 / 0.08) !important; -webkit-backdrop-filter: blur(10px) saturate(1.14); backdrop-filter: blur(10px) saturate(1.14); } body.console-v2 :is(input, textarea, select):focus { border-color: color-mix(in oklch, var(--primary) 68%, white 16%) !important; box-shadow: 0 0 0 3px color-mix(in oklch, var(--primary) 22%, transparent), inset 0 1px 0 oklch(1 0 0 / 0.1) !important; } body.console-v2 :is(input, textarea)::placeholder { color: color-mix(in oklch, var(--muted-foreground) 76%, transparent); } body.console-v2 :is( .v2-extension-nfc-launch, .v2-extension-gateway > button, .v2-nfc-inline > button, .v2-pet-card-region button, .v2-device-adjust-toggle, .config-action ) { color: var(--foreground) !important; background: color-mix(in oklch, var(--primary) 52%, transparent) !important; border-color: color-mix(in oklch, var(--primary) 54%, white 14%) !important; box-shadow: inset 0 1px 0 oklch(1 0 0 / 0.18), 0 7px 18px color-mix(in oklch, var(--primary) 18%, transparent) !important; } body.console-v2 :is( .v2-extension-nfc-launch, .v2-extension-gateway > button, .v2-nfc-inline > button, .v2-pet-card-region button, .v2-device-adjust-toggle, .config-action ):is(:hover, :focus-visible) { color: var(--primary-foreground) !important; background: color-mix(in oklch, var(--primary) 78%, transparent) !important; border-color: color-mix(in oklch, var(--primary) 76%, white 18%) !important; } body.console-v2 .v2-pet-card > header > button { color: var(--muted-foreground) !important; background: transparent !important; border-color: transparent !important; box-shadow: none !important; } body.console-v2 .v2-pet-card > header > button:is(:hover, :focus-visible) { color: var(--status-error-foreground) !important; background: var(--status-error-soft) !important; } body.console-v2 :is(.v2-nfc-inline-icon, .v2-extension-gateway > span, .v2-pet-card > header > span, .v2-pet-card-region > header > div > span) { color: color-mix(in oklch, var(--primary) 74%, white) !important; background: color-mix(in oklch, var(--primary) 18%, transparent) !important; border-color: color-mix(in oklch, var(--primary) 32%, transparent) !important; box-shadow: inset 0 1px 0 oklch(1 0 0 / 0.15) !important; } body.console-v2 :is(.v2-extension-linkage, .v2-sidebar-footer) { color: var(--muted-foreground) !important; border-color: var(--glass-line) !important; } /* Dialogs and secondary pages ------------------------------------------- */ body.console-v2 :is( .mode-gallery-backdrop, .mode-editor-backdrop, .v2-extension-dialog::backdrop, .energy-monitor-layer ) { background: oklch(0.055 0.025 286 / 0.62) !important; -webkit-backdrop-filter: blur(14px) saturate(1.12); backdrop-filter: blur(14px) saturate(1.12); } body.console-v2 :is( .mode-gallery, .mode-editor, .v2-nfc-dialog, .v2-gscu-tcp-dialog, .energy-monitor-page ) { color: var(--card-foreground) !important; background: linear-gradient(145deg, oklch(0.36 0.065 279 / 0.14), transparent 42%), oklch(0.15 0.045 285 / 0.88) !important; border-color: var(--glass-line-strong) !important; box-shadow: 0 28px 84px oklch(0.03 0.03 286 / 0.58), inset 0 1px 0 var(--glass-highlight) !important; -webkit-backdrop-filter: blur(24px) saturate(1.24); backdrop-filter: blur(24px) saturate(1.24); } body.console-v2 :is( .mode-gallery-card, .mode-editor-flow, .mode-editor-command-card, .v2-nfc-body, .v2-nfc-existing, .v2-nfc-pet-binding, .energy-kpi, .energy-trend-card, .energy-devices-card ) { color: var(--card-foreground) !important; background: var(--glass-card) !important; border-color: var(--glass-line) !important; box-shadow: inset 0 1px 0 var(--glass-highlight), 0 9px 24px oklch(0.04 0.03 286 / 0.2) !important; } body.console-v2 :is(.mode-gallery-close, .mode-editor-header > button, .v2-extension-dialog [data-dialog-close], #energyMonitorClose) { color: var(--muted-foreground) !important; background: var(--glass-card) !important; border-color: var(--glass-line) !important; } body.console-v2 :is(.mode-gallery-close, .mode-editor-header > button, .v2-extension-dialog [data-dialog-close], #energyMonitorClose):is(:hover, :focus-visible) { color: var(--foreground) !important; background: var(--glass-card-hover) !important; } /* Scrollbars ------------------------------------------------------------- */ body.console-v2 * { scrollbar-color: color-mix(in oklch, var(--primary) 70%, white 8%) oklch(0.08 0.025 286 / 0.32); } body.console-v2 *::-webkit-scrollbar-track { background: oklch(0.08 0.025 286 / 0.28); } body.console-v2 *::-webkit-scrollbar-thumb { background: color-mix(in oklch, var(--primary) 68%, white 10%); border: 2px solid transparent; background-clip: padding-box; } @media (max-width: 900px), (max-height: 680px) { body.console-v2.assistant-chat-enabled.v2-passive-display.v2-interactive-sync .workspace, body.console-v2.assistant-chat-enabled.v2-passive-display.v2-interactive-sync.assistant-drawer-open .workspace { width: 100vw !important; height: 100dvh !important; margin: 0 !important; border-width: 0; border-radius: 0; } } @media (prefers-reduced-motion: reduce) { body.console-v2::before, body.console-v2::after { filter: blur(44px); } }