:root { color-scheme: light; --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.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); --command-pending: var(--muted-foreground); --command-category: color-mix(in oklch, var(--primary) 62%, var(--destructive)); --command-control: var(--foreground); --command-frame: var(--muted-foreground); --text-caption: 0.6875rem; --text-control: 0.75rem; --text-input: 0.8125rem; --text-label: 0.75rem; /* Compatibility aliases for the existing non-Tailwind console. */ --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) 80%, var(--foreground)); --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: 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.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.29 0.042 252 / 10%); font-family: Inter, "Noto Sans SC", "Microsoft YaHei", system-ui, sans-serif; color: var(--ink); background: var(--bg); letter-spacing: 0; } .dark { color-scheme: dark; --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.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.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.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 { scroll-behavior: smooth; } body { background: radial-gradient(circle at 84% -8%, color-mix(in oklch, var(--primary) 12%, transparent), transparent 27rem), linear-gradient(180deg, var(--background) 0, var(--muted) 100%); } body.gesture-open { overflow: hidden; } body.mode-gallery-open, body.mode-editor-open { overflow: hidden; } .gesture-state-pill > i, .gesture-live-badge > i { width: 7px; height: 7px; border-radius: 50%; background: #19a889; box-shadow: 0 0 0 4px rgba(25, 168, 137, 0.12); } .workspace { grid-template-columns: minmax(330px, 388px) minmax(0, 1fr); max-width: 1920px; margin: 0 auto; } .command-panel { padding: 27px 24px 40px; background: rgba(255, 255, 255, 0.82); border-right-color: rgba(18, 69, 65, 0.1); backdrop-filter: blur(14px); } .panel-heading h2 { margin-bottom: 5px; font-size: clamp(25px, 2.1vw, 31px); letter-spacing: -0.04em; } .panel-intro { margin: 0 0 20px; color: var(--muted-foreground); font-size: 13px; line-height: 1.7; } .mode-rail { position: relative; margin-bottom: 18px; padding: 14px; border: 1px solid rgba(8, 118, 110, 0.14); border-radius: 16px; background: linear-gradient(145deg, rgba(231, 246, 242, 0.95), rgba(249, 253, 252, 0.95)); } .mode-rail-heading { display: flex; justify-content: space-between; align-items: center; margin-bottom: 10px; font-size: 12px; font-weight: 800; color: var(--accent-ink); } .mode-rail-heading > div { min-width: 0; display: grid; gap: 2px; } .mode-rail-heading small { color: var(--muted-foreground); font-size: 9px; font-weight: 600; } .mode-rail-heading button, .gesture-card-heading button { display: inline-flex; align-items: center; gap: 5px; padding: 5px 8px; border: 0; border-radius: 8px; color: var(--accent-ink); background: rgba(255, 255, 255, 0.72); font-size: 11px; cursor: pointer; } .mode-rail-heading svg, .gesture-card-heading svg { width: 14px; height: 14px; } .mode-chips { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; } .mode-chips button { min-width: 0; display: flex; align-items: center; justify-content: center; gap: 5px; padding: 9px 6px; border: 1px solid rgba(8, 118, 110, 0.12); border-radius: 10px; background: rgba(255, 255, 255, 0.86); color: #26423f; font-size: 12px; font-weight: 700; cursor: pointer; transition: transform 150ms ease, background 150ms ease; } .mode-chips button:hover { transform: translateY(-1px); background: #fff; } .mode-chips button.running { color: #24489b; background: #e7edff; border-color: rgba(66, 104, 194, 0.46); box-shadow: 0 0 0 3px rgba(66, 104, 194, 0.11); } .mode-chips button.succeeded { color: #0b725d; background: #ddf7ef; border-color: rgba(18, 148, 115, 0.42); box-shadow: 0 0 0 3px rgba(18, 148, 115, 0.1); } .mode-chips button.failed { color: #a84039; background: #fde9e7; border-color: rgba(201, 72, 62, 0.42); } .mode-chips button.running svg { animation: mode-chip-pulse 1s ease-in-out infinite alternate; } @keyframes mode-chip-pulse { to { transform: scale(1.16); } } .mode-chips svg { width: 15px; height: 15px; color: var(--primary); } .mode-rail-controls { display: flex; align-items: center; justify-content: flex-end; gap: 7px; margin-top: 9px; } .mode-rail-pager { display: inline-grid; grid-template-columns: repeat(2, 30px); gap: 3px; padding: 3px; border: 1px solid rgba(8, 118, 110, 0.12); border-radius: 10px; background: rgba(255, 255, 255, 0.65); } .mode-rail-page, .mode-gallery-toggle { border: 0; color: var(--accent-ink); background: transparent; cursor: pointer; } .mode-rail-page { width: 30px; height: 27px; display: inline-grid; place-items: center; border-radius: 7px; } .mode-rail-page:hover:not(:disabled), .mode-gallery-toggle:hover { background: rgba(8, 118, 110, 0.09); } .mode-rail-page:disabled { opacity: 0.3; cursor: default; } .mode-rail-page svg, .mode-gallery-toggle svg { width: 14px; height: 14px; } .mode-gallery-toggle { min-height: 35px; display: inline-flex; align-items: center; gap: 5px; padding: 5px 9px; border: 1px solid rgba(8, 118, 110, 0.13); border-radius: 10px; background: rgba(255, 255, 255, 0.74); font-size: 10px; font-weight: 800; white-space: nowrap; } .mode-gallery-toggle strong { min-width: 19px; height: 19px; display: inline-grid; place-items: center; padding: 0 5px; border-radius: 999px; color: #fff; background: var(--primary); font-size: 9px; } .mode-gallery-backdrop { position: fixed; inset: 0; z-index: 1200; display: grid; place-items: center; padding: clamp(16px, 3vw, 36px); background: rgba(13, 35, 37, 0.52); backdrop-filter: blur(8px); } .mode-gallery-backdrop[hidden] { display: none; } .mode-gallery { width: min(1320px, calc(100vw - 32px)); height: min(860px, calc(100dvh - 32px)); max-height: min(860px, calc(100dvh - 32px)); display: grid; grid-template-rows: auto auto minmax(0, 1fr) auto; gap: 12px; padding: clamp(18px, 2.2vw, 26px); overflow: hidden; color: var(--ink); background: radial-gradient(circle at 98% 2%, color-mix(in srgb, var(--v2-accent, var(--primary)) 12%, white), transparent 17rem), #f9fbfa; border: 1px solid rgba(255, 255, 255, 0.84); border-radius: 24px; box-shadow: 0 30px 90px rgba(12, 38, 39, 0.27); transform: translateY(8px) scale(0.99); opacity: 0; transition: transform 160ms ease, opacity 160ms ease; } .mode-gallery-backdrop.open .mode-gallery { transform: translateY(0) scale(1); opacity: 1; } .mode-gallery-header { display: flex; align-items: flex-start; justify-content: space-between; gap: 24px; } .mode-gallery-kicker { display: block; margin-bottom: 4px; color: var(--v2-accent, var(--primary)); font-size: 9px; font-weight: 900; letter-spacing: 0.17em; } .mode-gallery-header h2 { margin: 0; color: #153537; font-size: clamp(22px, 2vw, 28px); letter-spacing: -0.035em; } .mode-gallery-header p { margin: 5px 0 0; color: #748284; font-size: 11px; line-height: 1.55; } .mode-gallery-close { width: 36px; height: 36px; flex: 0 0 auto; display: inline-grid; place-items: center; border: 1px solid rgba(17, 71, 70, 0.12); border-radius: 11px; color: #4d6263; background: rgba(255, 255, 255, 0.82); cursor: pointer; } .mode-gallery-close:hover { color: var(--v2-accent, var(--primary)); background: #fff; } .mode-gallery-close svg { width: 17px; height: 17px; } .mode-gallery-summary { display: flex; align-items: center; justify-content: space-between; padding: 8px 11px; border: 1px solid color-mix(in srgb, var(--v2-accent, var(--primary)) 12%, white); border-radius: 11px; color: #5e7273; background: color-mix(in srgb, var(--v2-accent-soft, var(--accent-wash)) 42%, white); font-size: 10px; font-weight: 750; } .mode-gallery-summary span { display: inline-flex; align-items: center; gap: 7px; } .mode-gallery-summary svg { width: 14px; height: 14px; color: var(--v2-accent, var(--primary)); } .mode-gallery-summary strong { color: var(--v2-accent-strong, var(--accent-ink)); font-size: 15px; } .mode-gallery-groups { min-height: 0; display: grid; grid-template-columns: minmax(0, 1fr); align-items: start; gap: 13px; padding-right: 4px; overflow-y: auto; overscroll-behavior: contain; } .mode-gallery-group { min-width: 0; padding: 12px; border: 1px solid rgba(34, 82, 82, 0.1); border-radius: 15px; background: rgba(255, 255, 255, 0.78); } .mode-gallery-group > header, .mode-gallery-group > header > span, .mode-gallery-group > header > span > span { min-width: 0; display: flex; align-items: center; } .mode-gallery-group > header { justify-content: space-between; gap: 10px; margin-bottom: 9px; } .mode-gallery-group > header > span { gap: 8px; } .mode-gallery-group > header > span > span { align-items: flex-start; flex-direction: column; gap: 1px; } .mode-gallery-group > header svg { width: 17px; height: 17px; color: var(--v2-accent, var(--primary)); } .mode-gallery-group > header strong { color: #294345; font-size: 12px; } .mode-gallery-group > header small { color: #8a9797; font-size: 8px; line-height: 1.3; text-wrap: balance; } .mode-gallery-group > header b { min-width: 23px; height: 23px; display: inline-grid; place-items: center; border-radius: 999px; color: var(--v2-accent-strong, var(--accent-ink)); background: color-mix(in srgb, var(--v2-accent-soft, var(--accent-wash)) 70%, white); font-size: 9px; } .mode-gallery-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 7px; } .mode-gallery-card { min-width: 0; min-height: 70px; display: grid; grid-template-columns: 34px minmax(0, 1fr); align-items: center; gap: 9px; padding: 9px; text-align: left; border: 1px solid rgba(21, 92, 88, 0.11); border-radius: 12px; color: #1f393b; background: #fff; box-shadow: 0 4px 14px rgba(28, 66, 66, 0.035); cursor: pointer; transition: transform 140ms ease, border-color 140ms ease, box-shadow 140ms ease, background 140ms ease; } .mode-gallery-card-shell { min-width: 0; position: relative; } .mode-gallery-card-shell > .mode-gallery-card { width: 100%; height: 100%; padding-right: 35px; } .mode-gallery-edit, .mode-gallery-delete { width: 25px; height: 25px; position: absolute; top: 8px; right: 8px; display: inline-grid; place-items: center; padding: 0; border: 1px solid rgba(168, 64, 57, 0.16); border-radius: 8px; color: #a84039; background: rgba(255, 245, 243, 0.94); cursor: pointer; transition: color 140ms ease, background 140ms ease, border-color 140ms ease; } .mode-gallery-edit { border-color: rgba(17, 117, 109, 0.16); color: var(--v2-accent-strong, var(--accent-ink)); background: rgba(239, 250, 248, 0.96); } .mode-gallery-edit:hover { color: #075e58; background: #ddf4f0; border-color: rgba(17, 117, 109, 0.32); } .mode-gallery-delete:hover { color: #8f2e28; background: #ffe7e3; border-color: rgba(168, 64, 57, 0.32); } .mode-gallery-delete { top: auto; bottom: 8px; } .mode-gallery-edit:focus-visible, .mode-gallery-delete:focus-visible { outline: 2px solid rgba(168, 64, 57, 0.28); outline-offset: 2px; } .mode-gallery-edit:disabled, .mode-gallery-delete:disabled { opacity: 0.52; cursor: wait; } .mode-gallery-edit svg, .mode-gallery-delete svg { width: 12px; height: 12px; } .mode-gallery-card:hover { transform: translateY(-1px); border-color: color-mix(in srgb, var(--v2-accent, var(--primary)) 35%, white); box-shadow: 0 8px 20px rgba(26, 78, 76, 0.09); } .mode-gallery-card:disabled { cursor: wait; } .mode-gallery-card-icon { width: 34px; height: 34px; display: inline-grid; place-items: center; border-radius: 10px; color: var(--v2-accent, var(--primary)); background: color-mix(in srgb, var(--v2-accent-soft, var(--accent-wash)) 76%, white); } .mode-gallery-card-icon svg { width: 16px; height: 16px; } .mode-gallery-card-copy, .mode-gallery-card-heading { min-width: 0; display: flex; } .mode-gallery-card-copy { flex-direction: column; gap: 3px; } .mode-gallery-card-heading { align-items: center; justify-content: space-between; gap: 5px; } .mode-gallery-card-heading strong { overflow: hidden; font-size: 11px; text-overflow: ellipsis; white-space: nowrap; } .mode-gallery-state { flex: 0 0 auto; color: #829091; font-size: 7px; font-weight: 700; } .mode-gallery-source-badge { flex: 0 0 auto; padding: 2px 5px; color: #315eb8; background: rgba(91, 132, 222, 0.14); border: 1px solid rgba(91, 132, 222, 0.24); border-radius: 999px; font-size: 7px; font-weight: 800; line-height: 1; } .mode-gallery-source-badge[hidden] { display: none; } .mode-gallery-card-description, .mode-gallery-card-meta { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .mode-gallery-card-description { color: #728182; font-size: 8px; } .mode-gallery-card-meta { color: var(--v2-accent-strong, var(--accent-ink)); font-size: 7px; font-weight: 750; } .mode-gallery-card.running { color: #294e9d; background: #edf1ff; border-color: rgba(66, 104, 194, 0.4); box-shadow: 0 0 0 3px rgba(66, 104, 194, 0.09); } .mode-gallery-card.running .mode-gallery-card-icon { color: #4268c2; background: #dfe7ff; animation: mode-chip-pulse 1s ease-in-out infinite alternate; } .mode-gallery-card.running .mode-gallery-state { color: #4268c2; } .mode-gallery-card.succeeded { color: #0d755f; background: #e8f9f3; border-color: rgba(18, 148, 115, 0.38); } .mode-gallery-card.succeeded .mode-gallery-state { color: #0d856a; } .mode-gallery-card.failed { color: #a84039; background: #fff0ee; border-color: rgba(201, 72, 62, 0.36); } .mode-gallery-card.failed .mode-gallery-state { color: #bd493f; } .mode-gallery-empty { min-height: 70px; grid-column: 1 / -1; display: flex; align-items: center; justify-content: center; gap: 9px; padding: 10px; border: 1px dashed rgba(21, 92, 88, 0.18); border-radius: 12px; color: #718283; background: rgba(247, 251, 250, 0.74); } .mode-gallery-empty svg { width: 17px; color: var(--v2-accent, var(--primary)); } .mode-gallery-empty span { display: grid; gap: 2px; } .mode-gallery-empty strong { color: #496162; font-size: 10px; } .mode-gallery-empty small { font-size: 8px; } .mode-gallery-footer { display: flex; align-items: center; gap: 7px; color: #7b898a; font-size: 8px; } .mode-gallery-footer svg { width: 13px; height: 13px; color: var(--v2-accent, var(--primary)); } .mode-editor-backdrop { position: fixed; inset: 0; z-index: 1400; display: grid; place-items: center; padding: clamp(14px, 3vw, 32px); background: rgba(10, 31, 32, 0.62); backdrop-filter: blur(10px); } .mode-editor-backdrop[hidden] { display: none; } .mode-editor-backdrop.flow-expanded { padding: 0; backdrop-filter: none; } .mode-editor { width: min(1040px, calc(100vw - 28px)); height: min(900px, calc(100dvh - 28px)); max-height: calc(100dvh - 28px); display: grid; grid-template-rows: minmax(0, 30%) minmax(0, 1fr) auto auto; gap: 10px; padding: clamp(18px, 2.5vw, 26px); overflow: hidden; color: #183638; background: #f8fbfa; border: 1px solid rgba(255, 255, 255, 0.86); border-radius: 22px; box-shadow: 0 32px 100px rgba(7, 31, 32, 0.34); opacity: 0; transform: translateY(10px) scale(0.985); transition: opacity 160ms ease, transform 160ms ease, grid-template-rows 180ms ease; } .mode-editor.flow-expanded { width: 100vw; height: 100dvh; max-height: 100dvh; grid-template-rows: minmax(0, 1fr); gap: 0; padding: 0; border: 0; border-radius: 0; box-shadow: none; } .mode-editor.flow-expanded .mode-editor-setup, .mode-editor.flow-expanded .mode-editor-status, .mode-editor.flow-expanded .mode-editor-actions { display: none; } .mode-editor.flow-expanded .mode-editor-flow { border: 0; border-radius: 0; } .mode-editor-setup { min-height: 0; display: grid; grid-template-rows: auto minmax(0, 1fr); gap: 9px; overflow-x: hidden; overflow-y: auto; overscroll-behavior: contain; } .mode-editor-backdrop.open .mode-editor { opacity: 1; transform: translateY(0) scale(1); } .mode-editor-header { display: flex; align-items: flex-start; justify-content: space-between; gap: 20px; } .mode-editor-header > div > span { color: var(--v2-accent, var(--primary)); font-size: 9px; font-weight: 900; letter-spacing: 0.16em; } .mode-editor-header h2 { margin: 3px 0 0; font-size: clamp(21px, 2.4vw, 28px); letter-spacing: -0.035em; } .mode-editor-header p { margin: 5px 0 0; color: #748485; font-size: 11px; } .mode-editor-header button { width: 36px; height: 36px; flex: 0 0 auto; display: inline-grid; place-items: center; padding: 0; border: 1px solid rgba(22, 75, 73, 0.13); border-radius: 11px; color: #536768; background: #fff; cursor: pointer; } .mode-editor-header button svg { width: 17px; } .mode-editor-inputs { min-height: 0; display: grid; grid-template-columns: minmax(150px, 0.32fr) minmax(0, 1fr); grid-template-rows: minmax(0, 1fr); gap: 8px; } .mode-editor-field { min-height: 0; display: grid; gap: 6px; color: #526768; font-size: 10px; font-weight: 800; } .mode-editor-field input, .mode-editor-field textarea { width: 100%; padding: 11px 12px; border: 1px solid rgba(25, 90, 86, 0.16); border-radius: 11px; outline: none; color: #173638; background: #fff; font: inherit; font-size: 13px; font-weight: 500; line-height: 1.6; } .mode-editor-name-field input { height: 38px; } .mode-editor-instruction-field { grid-template-rows: auto minmax(0, 1fr); } .mode-editor-instruction-field textarea { min-height: 64px; height: 100%; overflow: auto; resize: none; } .mode-editor-field input:focus, .mode-editor-field textarea:focus { border-color: color-mix(in srgb, var(--v2-accent, var(--primary)) 58%, white); box-shadow: 0 0 0 3px color-mix(in srgb, var(--v2-accent-soft, var(--accent-wash)) 70%, transparent); } .mode-editor-flow { min-height: 0; display: grid; grid-template-rows: auto minmax(0, 1fr); overflow: hidden; border: 1px solid rgba(25, 90, 86, 0.12); border-radius: 12px; background: #edf5f3; } .mode-editor-flow header { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 9px 11px; color: #d5efeb; background: rgba(255, 255, 255, 0.045); font-size: 10px; } .mode-editor-flow header span { display: inline-flex; align-items: center; gap: 7px; font-weight: 800; } .mode-editor-flow header svg { width: 14px; color: #71d6c9; } .mode-editor-flow header b { color: #85ddd2; font-size: 9px; } .mode-editor-flow-tools { display: inline-flex; align-items: center; justify-content: flex-end; gap: 8px; } .mode-editor-flow-tools button { width: 28px; height: 28px; display: inline-grid; place-items: center; padding: 0; border: 1px solid rgba(20, 118, 110, 0.2); border-radius: 8px; color: #08746d; background: rgba(255, 255, 255, 0.72); cursor: pointer; } .mode-editor-flow-tools button:hover, .mode-editor-flow-tools button:focus-visible { color: #055e58; border-color: rgba(20, 118, 110, 0.38); background: #fff; } .mode-editor-flow-tools button:focus-visible { outline: 2px solid rgba(20, 118, 110, 0.2); outline-offset: 2px; } .mode-editor-flow-tools button svg { width: 14px; height: 14px; } .mode-editor-flow-preview { min-height: 0; padding: 12px; overflow-x: hidden; overflow-y: auto; display: block; color: #183e3c; overscroll-behavior: contain; scrollbar-gutter: stable; touch-action: pan-y; -webkit-overflow-scrolling: touch; } .mode-editor-flow-preview.empty { display: grid; place-items: center; color: #738a88; } .mode-editor-command-card + .mode-editor-command-card { margin-top: 10px; } .mode-editor-flow-preview > p { margin: 0; padding: 20px 12px; font-size: 11px; text-align: center; } .mode-editor-command-card { min-width: 0; height: max-content; overflow: hidden; border: 1px solid rgba(18, 104, 98, 0.08); border-radius: 14px; background: #f5f9f8; box-shadow: 0 3px 10px rgba(27, 73, 69, 0.035); } .mode-editor-command-card > summary { min-height: 74px; position: relative; display: grid; grid-template-columns: minmax(0, 1fr) 18px; grid-template-rows: auto auto; align-content: center; gap: 8px 12px; padding: 13px 15px; list-style: none; cursor: pointer; } .mode-editor-command-card > summary::-webkit-details-marker { display: none; } .mode-editor-command-meta { min-width: 0; display: flex; align-items: center; gap: 9px; } .mode-editor-command-meta b { flex: 0 0 auto; min-width: 48px; padding: 3px 9px; color: #086e68; background: #ddf3f0; border: 1px solid rgba(8, 110, 104, 0.14); border-radius: 999px; font: 850 10px/1.45 ui-monospace, SFMono-Regular, Consolas, monospace; letter-spacing: 0.04em; text-align: center; } .mode-editor-command-card[data-can-channel="CAN0"] .mode-editor-command-meta b { color: #8b5c13; background: #f8eacb; border-color: rgba(139, 92, 19, 0.14); } .mode-editor-command-meta strong { overflow: hidden; color: #718583; font-size: 11px; font-weight: 850; text-overflow: ellipsis; white-space: nowrap; } .mode-editor-command-card > summary > code { min-width: 0; overflow-wrap: anywhere; color: #00645e; font: 800 14px/1.45 ui-monospace, SFMono-Regular, Consolas, monospace; } .mode-editor-command-card > summary > svg { width: 16px; height: 16px; grid-column: 2; grid-row: 1 / 3; align-self: center; color: #76908e; transition: transform 150ms ease; } .mode-editor-command-card[open] > summary > svg { transform: rotate(180deg); } .mode-editor-message-sequence { display: grid; gap: 9px; padding: 11px 13px 13px; border-top: 1px solid rgba(18, 104, 98, 0.09); background: rgba(255, 255, 255, 0.72); } .mode-editor-message-sequence > header { padding: 0; color: #647c7a; background: transparent; font-size: 9px; } .mode-editor-message-sequence > header b { color: #0b7770; } .mode-editor-message-sequence > p { margin: 0; color: #809391; font-size: 10px; } .mode-editor-message-sequence ol { display: grid; gap: 8px; margin: 0; padding: 0; list-style: none; } .mode-editor-message-sequence li { min-width: 0; overflow: hidden; border: 1px solid rgba(15, 89, 84, 0.1); border-radius: 10px; background: #102b2d; } .mode-editor-message-sequence li > div { display: flex; align-items: flex-start; justify-content: space-between; flex-wrap: wrap; gap: 12px; padding: 7px 9px; color: #8bd4cd; background: rgba(255, 255, 255, 0.045); font: 750 8px/1.4 ui-monospace, SFMono-Regular, Consolas, monospace; } .mode-editor-message-sequence li > div code { min-width: 0; overflow: visible; color: #c2e9e4; overflow-wrap: anywhere; text-overflow: clip; white-space: normal; } .mode-editor-message-sequence li > pre { margin: 0; padding: 9px; overflow: visible; color: #c9e8e4; font: 9px/1.55 ui-monospace, SFMono-Regular, Consolas, monospace; white-space: pre-wrap; word-break: break-word; } .mode-editor.flow-expanded .mode-editor-command-meta strong { overflow: visible; text-overflow: clip; white-space: normal; } .mode-editor.flow-expanded .mode-editor-flow-preview { padding: clamp(12px, 2vw, 24px); } .mode-editor-status { min-height: 16px; margin: 0; color: #6f8081; font-size: 10px; line-height: 1.5; } .mode-editor-actions { display: flex; justify-content: flex-end; gap: 8px; } .mode-editor-actions button { min-width: 90px; height: 38px; display: inline-flex; align-items: center; justify-content: center; gap: 7px; padding: 0 16px; border: 1px solid rgba(24, 83, 80, 0.15); border-radius: 10px; color: #466061; background: #fff; font-size: 11px; font-weight: 800; cursor: pointer; } .mode-editor-actions button svg { width: 14px; } .mode-editor-actions .mode-editor-execute { color: #075f59; background: #e2f6f2; border-color: rgba(13, 125, 116, 0.2); } .mode-editor-actions .mode-editor-complete { color: #fff; background: var(--v2-accent, var(--primary)); } .mode-editor-actions button:disabled { opacity: 0.45; cursor: not-allowed; } .save-mode-composer { display: grid; grid-template-columns: minmax(0, 1fr); gap: 7px; margin-top: 10px; padding: 10px; background: rgba(255, 255, 255, 0.96); border: 1px solid rgba(8, 118, 110, 0.14); border-radius: 12px; box-shadow: 0 16px 34px rgba(31, 70, 67, 0.14); } .save-mode-composer[hidden] { display: none; } .save-mode-composer input, .gesture-customize select { min-width: 0; border: 1px solid rgba(8, 118, 110, 0.2); border-radius: 9px; padding: 9px 10px; background: #fff; color: var(--ink); font: inherit; } .save-mode-source { min-width: 0; } .save-mode-source small { display: block; margin-bottom: 3px; color: var(--muted-foreground); font-size: 9px; } .save-mode-source p { margin: 0; overflow: hidden; color: var(--ink); font-size: 11px; line-height: 1.4; text-overflow: ellipsis; white-space: nowrap; } .save-mode-source p.empty { color: var(--muted-foreground); } .save-mode-actions { display: grid; grid-template-columns: 0.72fr 1.28fr; gap: 6px; } .save-mode-composer .save-mode-actions button { min-height: 32px; border: 0; border-radius: 9px; padding: 6px 12px; color: #fff; background: var(--primary); font-weight: 750; cursor: pointer; } .save-mode-composer .save-mode-actions button:first-child { color: var(--muted-foreground); background: #edf2f1; } .save-mode-composer .save-mode-actions button:disabled { cursor: wait; opacity: 0.64; } .command-composer { position: relative; margin-bottom: 18px; } #utterance { min-height: 132px; padding: 17px 17px 36px; border-color: rgba(27, 77, 73, 0.19); border-radius: 16px; background: rgba(255, 255, 255, 0.92); box-shadow: 0 12px 30px rgba(28, 61, 58, 0.06); font-size: 15px; line-height: 1.65; resize: vertical; transition: border-color 180ms ease, box-shadow 180ms ease; } #utterance:focus { border-color: rgba(8, 118, 110, 0.58); box-shadow: 0 15px 35px rgba(8, 118, 110, 0.12); } .composer-hint { position: absolute; right: 12px; bottom: 10px; color: #8a9895; font-size: 10px; pointer-events: none; } .primary-action { min-height: 50px; border-radius: 14px; background: linear-gradient(135deg, #0d8c81, #086c65); box-shadow: 0 13px 28px rgba(8, 118, 110, 0.2); transition: transform 180ms ease, box-shadow 180ms ease; } .primary-action:hover:not(:disabled) { transform: translateY(-1px); box-shadow: 0 17px 34px rgba(8, 118, 110, 0.26); } .main-panel { padding: 25px clamp(20px, 2.4vw, 38px) 60px; } .request-header, .joint-twin-shell, .result-workspace { border-radius: 18px; } .request-header { padding: 18px 20px; background: rgba(255, 255, 255, 0.72); border: 1px solid rgba(24, 70, 67, 0.09); } .domain-panel, .seat-card, .result-workspace, .joint-twin-shell { border-color: rgba(24, 70, 67, 0.1); box-shadow: 0 14px 36px rgba(27, 58, 58, 0.05); } .gesture-drawer { position: fixed; top: 0; right: 0; z-index: 90; width: min(470px, 100vw); height: 100dvh; display: flex; flex-direction: column; gap: 14px; padding: 22px; overflow: auto; color: #e9fbf6; background: radial-gradient(circle at 70% 0, rgba(40, 184, 159, 0.22), transparent 20rem), linear-gradient(165deg, #102727 0%, #0b1c1e 62%, #071416 100%); border-left: 1px solid rgba(133, 235, 210, 0.15); box-shadow: -28px 0 70px rgba(3, 15, 16, 0.32); transform: translateX(105%); visibility: hidden; transition: transform 280ms cubic-bezier(.22, .75, .2, 1), visibility 280ms; } .gesture-drawer.open { transform: translateX(0); visibility: visible; } .gesture-drawer-header, .gesture-card-heading, .gesture-status-strip, .gesture-actions, .gesture-now, .gesture-footnote { display: flex; align-items: center; } .gesture-drawer-header { justify-content: space-between; gap: 18px; } .gesture-drawer-header h2 { margin: 2px 0 3px; color: #fff; font-size: 28px; letter-spacing: -0.04em; } .gesture-drawer-header p { margin: 0; color: #9db9b4; font-size: 12px; } .gesture-close { width: 38px; height: 38px; display: grid; place-items: center; flex: 0 0 auto; border: 1px solid rgba(255, 255, 255, 0.12); border-radius: 50%; color: #dff7f1; background: rgba(255, 255, 255, 0.06); cursor: pointer; } .gesture-status-strip { justify-content: space-between; gap: 12px; min-height: 35px; color: #9db9b4; font-size: 11px; } .gesture-state-pill { display: inline-flex; align-items: center; gap: 8px; padding: 6px 10px; border: 1px solid rgba(255, 255, 255, 0.12); border-radius: 999px; color: #c4d8d4; background: rgba(255, 255, 255, 0.05); } .gesture-state-pill.armed, .gesture-state-pill.moving { color: #8cf5d5; border-color: rgba(66, 224, 184, 0.26); background: rgba(30, 174, 139, 0.11); } .gesture-state-pill.moving > i { animation: gesturePulse 1s infinite; } @keyframes gesturePulse { 50% { box-shadow: 0 0 0 8px rgba(25, 168, 137, 0); } } .gesture-camera-stage { position: relative; aspect-ratio: 16 / 10; overflow: hidden; border: 1px solid rgba(142, 239, 216, 0.15); border-radius: 19px; background: #071112; box-shadow: inset 0 0 50px rgba(0, 0, 0, 0.28); } .gesture-camera-stage video, .gesture-camera-stage canvas { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; transform: scaleX(-1); } .gesture-camera-stage canvas { z-index: 2; pointer-events: none; } .gesture-camera-empty { position: absolute; inset: 0; z-index: 3; display: grid; place-content: center; justify-items: center; gap: 8px; padding: 28px; text-align: center; background: radial-gradient(circle at 50% 45%, rgba(28, 126, 113, 0.16), transparent 10rem); } .gesture-camera-empty[hidden] { display: none; } .gesture-camera-empty > span { width: 54px; height: 54px; display: grid; place-items: center; border: 1px solid rgba(125, 238, 212, 0.22); border-radius: 18px; color: #74e3c7; background: rgba(46, 176, 148, 0.09); } .gesture-camera-empty > span svg { width: 27px; height: 27px; } .gesture-camera-empty strong { color: #eafffa; } .gesture-camera-empty p { margin: 0; color: #7f9e98; font-size: 11px; } .gesture-live-badge { position: absolute; top: 11px; left: 11px; z-index: 4; display: flex; align-items: center; gap: 7px; padding: 5px 8px; border-radius: 999px; color: #d7fff4; background: rgba(7, 20, 21, 0.72); font-size: 9px; font-weight: 800; letter-spacing: .11em; backdrop-filter: blur(8px); } .gesture-live-badge[hidden] { display: none; } .gesture-now { display: grid; grid-template-columns: 1fr auto 1fr; gap: 12px; padding: 12px 14px; border: 1px solid rgba(255, 255, 255, 0.09); border-radius: 14px; background: rgba(255, 255, 255, 0.04); } .gesture-now > div { display: grid; gap: 3px; } .gesture-now > div:last-child { text-align: right; } .gesture-now span { color: #799891; font-size: 10px; } .gesture-now strong { overflow: hidden; color: #ebfff9; font-size: 13px; text-overflow: ellipsis; white-space: nowrap; } .gesture-now > svg { color: #52766f; } .gesture-progress { height: 4px; overflow: hidden; border-radius: 999px; background: rgba(255, 255, 255, 0.07); } .gesture-progress i { width: 100%; height: 100%; display: block; border-radius: inherit; background: linear-gradient(90deg, #3bc9a7, #a4f2da); transform: scaleX(0); transform-origin: left; transition: transform 90ms linear; } .gesture-actions { display: grid; grid-template-columns: 1.35fr 1fr 1fr; gap: 8px; } .gesture-actions button, .gesture-customize button { min-height: 42px; display: inline-flex; align-items: center; justify-content: center; gap: 7px; border: 1px solid rgba(255, 255, 255, 0.11); border-radius: 11px; color: #cbe2dc; background: rgba(255, 255, 255, 0.05); font-weight: 700; cursor: pointer; } .gesture-actions button:disabled { opacity: .38; cursor: not-allowed; } .gesture-actions .gesture-primary { color: #072b27; border: 0; background: linear-gradient(135deg, #75e5c7, #32b99c); } .gesture-actions .gesture-primary.active { color: #ffd9d9; border: 1px solid rgba(255, 145, 145, 0.2); background: rgba(190, 54, 62, 0.16); } .gesture-guide-card { padding: 14px; border: 1px solid rgba(255, 255, 255, 0.09); border-radius: 16px; background: rgba(255, 255, 255, 0.035); } .gesture-card-heading { justify-content: space-between; margin-bottom: 11px; } .gesture-card-heading > div { display: grid; gap: 2px; } .gesture-card-heading span { color: #effffb; font-size: 13px; font-weight: 800; } .gesture-card-heading small { color: #78958f; font-size: 9px; } .gesture-card-heading button { color: #9adfce; background: rgba(64, 193, 163, 0.08); } .gesture-card-heading button.active { color: #d9fff4; background: rgba(64, 193, 163, 0.2); } .gesture-map-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 6px; } .gesture-map-grid > div { min-width: 0; display: grid; grid-template-columns: minmax(0, 1fr) auto auto; align-items: center; gap: 5px; padding: 8px 9px; border-radius: 9px; color: #9db8b2; background: rgba(255, 255, 255, 0.035); font-size: 9px; } .gesture-map-grid span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .gesture-map-grid i { color: #486c64; font-style: normal; } .gesture-map-grid b { color: #8de6cf; } .gesture-customize { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; margin-top: 12px; padding-top: 12px; border-top: 1px solid rgba(255, 255, 255, 0.08); } .gesture-customize[hidden] { display: none; } .gesture-customize > div { display: grid; gap: 2px; } .gesture-customize > div span { color: #78958f; font-size: 9px; } .gesture-customize > div strong { color: #e5faf4; font-size: 11px; } .gesture-customize select { color: #dff8f1; border-color: rgba(255, 255, 255, 0.12); background: #17302f; font-size: 10px; } .gesture-customize button { min-height: 34px; font-size: 10px; } .gesture-footnote { gap: 8px; margin-top: auto; padding: 10px 12px; border-radius: 11px; color: #84a69e; background: rgba(47, 133, 116, 0.08); font-size: 10px; line-height: 1.5; } .gesture-footnote svg { flex: 0 0 auto; color: #59caae; } @media (max-width: 1180px) { .workspace { grid-template-columns: 330px minmax(0, 1fr); } } @media (max-width: 820px) { .workspace { display: block; } .command-panel { position: static; width: auto; padding: 22px 16px; border-right: 0; border-bottom: 1px solid var(--line); } .main-panel { padding: 18px 12px 45px; } .gesture-drawer { width: 100vw; padding: 18px 15px; border-left: 0; } .mode-gallery-groups { grid-template-columns: minmax(0, 1fr); } } @media (max-width: 560px) { .mode-gallery { max-height: calc(100dvh - 20px); padding: 15px; border-radius: 18px; } .mode-gallery-grid { grid-template-columns: minmax(0, 1fr); } .mode-gallery-header p, .mode-gallery-footer { display: none; } .mode-editor { height: calc(100dvh - 18px); max-height: calc(100dvh - 18px); grid-template-rows: minmax(0, 30%) minmax(0, 1fr) auto auto; gap: 8px; padding: 15px; border-radius: 17px; } .mode-editor-setup { gap: 7px; } .mode-editor-inputs { grid-template-columns: minmax(110px, 0.38fr) minmax(0, 1fr); gap: 6px; } .mode-editor-header p { display: none; } .mode-editor-actions button { min-width: 0; flex: 1 1 0; padding: 0 10px; } .mode-editor.flow-expanded { width: 100vw; height: 100dvh; max-height: 100dvh; grid-template-rows: minmax(0, 1fr); padding: 0; border-radius: 0; } } @media (max-height: 700px) { .mode-editor-header > div > span, .mode-editor-header p { display: none; } .mode-editor-header h2 { margin-top: 0; font-size: 20px; } .mode-editor-setup { gap: 6px; } } @media (prefers-reduced-motion: reduce) { html { scroll-behavior: auto; } *, *::before, *::after { transition-duration: 0.01ms !important; animation-duration: 0.01ms !important; } } * { box-sizing: border-box; } body { margin: 0; min-width: 320px; min-height: 100vh; background: var(--bg); } button, textarea { font: inherit; letter-spacing: 0; } button { color: inherit; } button:focus-visible, textarea:focus-visible { outline: 3px solid rgba(50, 105, 168, 0.2); outline-offset: 2px; } svg { width: 18px; height: 18px; stroke-width: 1.8; } .request-title-row, .matrix-stat, .section-title-row, .seat-identity, .thermal-states, .detail-heading, .code-toolbar, .frame-summary, .execution-summary, .result-item, .primary-action, .segment, .tab { display: flex; align-items: center; } .workspace { min-height: calc(100vh - 70px); display: grid; grid-template-columns: 350px minmax(0, 1fr); } .command-panel { padding: 24px; background: var(--surface); border-right: 1px solid var(--line); overflow-y: auto; } .panel-heading { margin-bottom: 20px; } .section-kicker { display: block; margin-bottom: 5px; color: var(--teal); font-size: 10px; font-weight: 800; } .panel-heading h2, .request-header h2, .section-title-row h3, .coverage-section h3, .detail-heading h3 { margin: 0; } .panel-heading h2 { font-size: 21px; } label, .field-label { display: block; margin-bottom: 8px; color: #3d4b52; font-size: 12px; font-weight: 750; } .field-label-row { min-height: 32px; display: flex; align-items: center; justify-content: space-between; gap: 8px; } .field-label-row label { margin-bottom: 0; } .context-reset { width: 30px; height: 30px; display: inline-flex; align-items: center; justify-content: center; color: var(--muted-foreground); background: transparent; border: 0; border-radius: 4px; cursor: pointer; } .context-reset:hover { color: var(--blue); background: var(--blue-soft); } .context-reset svg { width: 17px; height: 17px; } textarea { width: 100%; height: 122px; resize: vertical; padding: 13px 14px; color: var(--ink); background: var(--surface-muted); border: 1px solid var(--line-strong); border-radius: 6px; font-size: 14px; line-height: 1.65; } textarea:focus { border-color: var(--blue); background: white; } .field-group { margin-top: 18px; } .vehicle-select-control { min-height: 40px; display: grid; grid-template-columns: 18px minmax(0, 1fr); align-items: center; gap: 9px; padding: 0 11px; border: 1px solid var(--line); border-radius: 6px; background: var(--surface-muted); } .vehicle-select-control svg { width: 17px; height: 17px; color: var(--teal); } .vehicle-select-control select { min-width: 0; width: 100%; height: 38px; border: 0; outline: 0; background: transparent; color: var(--ink); font: inherit; font-size: 13px; font-weight: 750; } .segmented { display: grid; grid-template-columns: 1fr 1fr; padding: 3px; border: 1px solid var(--line); border-radius: 6px; background: var(--surface-muted); } .segment, .mode-option { min-height: 36px; justify-content: center; gap: 7px; border: 0; border-radius: 4px; background: transparent; color: var(--muted-foreground); font-size: 12px; font-weight: 700; cursor: pointer; } .segment.active, .mode-option.active { color: var(--ink); background: white; box-shadow: 0 1px 4px rgba(20, 41, 47, 0.1); } .segment:disabled, .mode-option:disabled { cursor: not-allowed; opacity: 0.48; } .approval-field input { width: 100%; min-height: 40px; margin-top: 8px; padding: 9px 11px; color: var(--ink); background: white; border: 1px solid var(--line-strong); border-radius: 6px; font: inherit; } .approval-field input:focus { outline: 0; border-color: var(--blue); box-shadow: 0 0 0 3px rgba(38, 102, 159, 0.12); } .provider-note { min-height: 32px; margin: 8px 0 0; color: var(--muted-foreground); font-size: 11px; line-height: 1.5; } .primary-action { width: 100%; min-height: 45px; justify-content: center; gap: 9px; margin-top: 14px; color: white; background: var(--teal); border: 1px solid var(--teal); border-radius: 6px; font-weight: 750; cursor: pointer; } .primary-action:hover { background: var(--teal-dark); } .primary-action:disabled { cursor: wait; opacity: 0.7; } .primary-action.loading svg { animation: spin 0.9s linear infinite; } .main-panel { min-width: 0; padding: 24px 28px 40px; overflow: auto; } .request-header { display: flex; justify-content: space-between; align-items: center; gap: 24px; margin-bottom: 18px; } .request-title-row { flex-wrap: wrap; gap: 10px; } .request-header h2 { font-size: 22px; } .request-header p { margin: 7px 0 0; color: var(--muted-foreground); font-family: "SFMono-Regular", Consolas, monospace; font-size: 11px; } .run-status { padding: 4px 7px; border-radius: 4px; font-size: 10px; font-weight: 850; } .run-status.idle { color: var(--muted-foreground); background: #e7eceb; } .run-status.processing { color: var(--blue); background: var(--blue-soft); } .run-status.succeeded { color: var(--teal-dark); background: var(--teal-soft); } .run-status.partial { color: var(--amber); background: var(--amber-soft); } .run-status.failed { color: var(--red); background: var(--red-soft); } .matrix-stat { flex: 0 0 auto; gap: 10px; padding-left: 22px; border-left: 1px solid var(--line); } .matrix-stat > svg { width: 24px; height: 24px; color: var(--blue); } .matrix-stat strong, .matrix-stat span { display: block; } .matrix-stat strong { font-size: 15px; } .matrix-stat span { margin-top: 2px; color: var(--muted-foreground); font-size: 9px; } .cabin-band { margin-top: 22px; padding: 20px 0 22px; border-top: 1px solid var(--line); border-bottom: 1px solid var(--line); } .cabin-heading h3 { margin: 0; font-size: 16px; } .domain-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 12px; } .domain-panel { min-width: 0; min-height: 262px; padding: 15px; background: var(--surface); border: 1px solid var(--line); border-radius: 6px; overflow: hidden; } .domain-panel header { display: grid; grid-template-columns: 34px minmax(0, 1fr) auto; align-items: center; gap: 9px; } .domain-icon { width: 34px; height: 34px; display: grid; place-items: center; color: var(--teal); background: var(--teal-soft); border-radius: 5px; } .domain-icon svg { width: 18px; height: 18px; } .roof-panel .domain-icon { color: var(--blue); background: var(--blue-soft); } .ambient-panel .domain-icon { color: var(--amber); background: var(--amber-soft); } .domain-panel header strong, .domain-panel header small { display: block; } .domain-panel header strong { font-size: 13px; } .domain-panel header small { margin-top: 2px; color: var(--muted-foreground); font: 8px "SFMono-Regular", Consolas, monospace; } .device-state { padding: 4px 5px; color: var(--muted-foreground); background: #edf1f0; border-radius: 3px; font: 800 8px "SFMono-Regular", Consolas, monospace; } .domain-panel.active .device-state { color: var(--teal-dark); background: var(--teal-soft); } .climate-display { min-height: 96px; display: grid; grid-template-columns: 1fr 66px 1fr; align-items: center; gap: 7px; margin-top: 13px; padding: 8px 5px; background: #f3f8fa; border: 1px solid #dce6e9; } .zone-temperature { text-align: center; } .zone-temperature span, .zone-temperature strong { display: block; } .zone-temperature span { color: var(--muted-foreground); font-size: 9px; } .zone-temperature strong { margin-top: 3px; color: #216a8b; font: 700 25px "SFMono-Regular", Consolas, monospace; } .zone-temperature sup { font-size: 9px; } .passenger-temperature { border-left: 1px solid #dce6e9; } .airflow-visual { height: 56px; display: flex; align-items: flex-end; justify-content: center; gap: 3px; } .airflow-visual i { width: 5px; height: 13px; background: #d7e1e4; border-radius: 2px 2px 0 0; } .airflow-visual i:nth-child(2) { height: 18px; } .airflow-visual i:nth-child(3) { height: 24px; } .airflow-visual i:nth-child(4) { height: 31px; } .airflow-visual i:nth-child(5) { height: 38px; } .airflow-visual i:nth-child(6) { height: 45px; } .airflow-visual i:nth-child(7) { height: 52px; } .airflow-visual[data-level="1"] i:nth-child(-n + 1), .airflow-visual[data-level="2"] i:nth-child(-n + 2), .airflow-visual[data-level="3"] i:nth-child(-n + 3), .airflow-visual[data-level="4"] i:nth-child(-n + 4), .airflow-visual[data-level="5"] i:nth-child(-n + 5), .airflow-visual[data-level="6"] i:nth-child(-n + 6), .airflow-visual[data-level="7"] i { background: #3d91b5; animation: feedback-pulse 1.4s ease-in-out infinite; } .roof-visual { min-height: 96px; display: grid; place-items: center; margin-top: 13px; padding: 11px 15px; background: #eef2f3; border: 1px solid #dae1e3; } .roof-glass { width: min(100%, 230px); height: 67px; position: relative; overflow: hidden; background: rgba(105, 160, 185, 0.28); border: 3px solid #75868d; border-radius: 18px 18px 7px 7px; box-shadow: inset 0 0 0 2px rgba(255, 255, 255, 0.35); } .roof-glass > i { width: 2px; height: 100%; position: absolute; top: 0; background: rgba(86, 105, 113, 0.5); } .roof-glass > i:nth-of-type(1) { left: 25%; } .roof-glass > i:nth-of-type(2) { left: 50%; } .roof-glass > i:nth-of-type(3) { left: 75%; } .roof-shade { width: 100%; height: 100%; position: absolute; right: 0; top: 0; z-index: 1; background: #c9cecc; border-left: 3px solid #8a9491; transition: width 320ms ease; } .ambient-visual { min-height: 96px; position: relative; display: grid; place-items: center; margin-top: 13px; background: #282d31; border: 1px solid #42494d; color: #b9c3c7; overflow: hidden; } .ambient-dashboard-sketch { width: 88%; height: 58px; position: absolute; top: 11px; left: 6%; border: 1px solid #5c676c; border-top: 5px solid #768287; border-radius: 16px 16px 5px 5px; background: linear-gradient(180deg, #333a3e 0 43%, #22282c 44% 100%); } .ambient-dashboard-top { width: 88%; height: 1px; position: absolute; top: 15px; left: 6%; background: #667176; } .ambient-center-screen { width: 24%; height: 25px; position: absolute; top: 20px; left: 8%; border: 2px solid #657177; border-radius: 3px; background: #131a1e; } .ambient-glovebox { width: 52%; height: 23px; position: absolute; top: 25px; right: 6%; border: 1px solid #505b60; border-radius: 2px 2px 7px 7px; background: #252c30; } .ambient-glovebox-lamp { width: 50%; position: absolute; top: 19px; right: 7%; z-index: 2; display: grid; grid-template-columns: repeat(9, minmax(0, 1fr)); gap: 3px; } .ambient-line { height: 4px; display: block; background: #74d9ff; border-radius: 2px; box-shadow: 0 0 8px #74d9ff; } .ambient-location-label { position: absolute; right: 10%; bottom: 5px; color: #c9d4d8; font-size: 7px; font-weight: 750; letter-spacing: 0.04em; } .domain-readouts { display: grid; grid-template-columns: 1fr 1fr; gap: 0 14px; margin: 10px 0 0; } .domain-readouts > div { min-width: 0; display: flex; align-items: center; justify-content: space-between; gap: 8px; padding: 7px 0; border-bottom: 1px solid #e6ebe9; font-size: 9px; } .domain-readouts dt { color: var(--muted-foreground); } .domain-readouts dd { min-width: 0; display: flex; align-items: center; gap: 5px; margin: 0; font-weight: 750; text-align: right; overflow-wrap: anywhere; } .color-swatch { width: 10px; height: 10px; flex: 0 0 auto; display: inline-block; background: #74d9ff; border: 1px solid rgba(23, 35, 43, 0.25); border-radius: 2px; } .twin-band { margin: 24px -28px 0; overflow: hidden; background: #eef3f1; border-top: 1px solid var(--line); border-bottom: 1px solid var(--line); } .twin-heading { min-height: 68px; display: flex; align-items: center; justify-content: space-between; gap: 18px; padding: 15px 28px 10px; position: relative; z-index: 4; } .twin-heading h3 { margin: 0; font-size: 17px; } .preset-indicator { display: flex; align-items: center; gap: 5px; margin-top: 6px; color: var(--teal-dark); font-size: 9px; font-weight: 750; } .preset-indicator svg { width: 12px; height: 12px; } .preset-indicator[hidden] { display: none; } .twin-toolbar, .twin-selector { display: flex; align-items: center; } .twin-toolbar { gap: 8px; } .twin-selector { padding: 3px; background: rgba(255, 255, 255, 0.72); border: 1px solid #cbd7d3; border-radius: 6px; } .twin-seat-button { min-width: 58px; height: 31px; padding: 0 12px; color: var(--muted-foreground); background: transparent; border: 0; border-radius: 4px; font-size: 11px; font-weight: 750; cursor: pointer; } .twin-seat-button.active { color: var(--ink); background: white; box-shadow: 0 1px 5px rgba(24, 42, 48, 0.12); } .icon-button.twin-reset { color: #526269; background: rgba(255, 255, 255, 0.62); border: 1px solid #cbd7d3; } .icon-button.twin-reset:hover { color: var(--teal-dark); background: white; } .twin-stage { height: clamp(420px, 44vw, 560px); min-height: 420px; position: relative; overflow: hidden; cursor: grab; touch-action: none; user-select: none; } .twin-stage.dragging { cursor: grabbing; } #seatTwinCanvas { width: 100%; height: 100%; display: block; } .twin-seat-label { display: flex; align-items: center; gap: 6px; position: absolute; bottom: 26px; z-index: 2; color: #3b4c53; font-size: 10px; font-weight: 800; pointer-events: none; } .twin-seat-label.driver { left: 52%; } .twin-seat-label.passenger { left: 25%; } .twin-seat-label small { margin-left: 2px; color: #78878d; font: 7px "SFMono-Regular", Consolas, monospace; } .twin-seat-label i, .twin-feedback i { width: 7px; height: 7px; display: inline-block; border-radius: 50%; background: var(--teal); box-shadow: 0 0 0 4px rgba(8, 118, 110, 0.12); } .twin-seat-label.passenger i { background: var(--blue); box-shadow: 0 0 0 4px rgba(50, 105, 168, 0.12); } .twin-callout-layer { --callout-color: var(--teal); position: absolute; inset: 0; z-index: 4; overflow: hidden; pointer-events: none; } .twin-stage[data-selected-seat="passenger"] .twin-callout-layer { --callout-color: var(--blue); } .twin-callout { --leader-start-x: 0px; --leader-start-y: 0px; --leader-length: 0px; --leader-angle: 0rad; --leader-dx: 0px; --leader-dy: 0px; min-width: 78px; display: grid; grid-template-columns: 1fr auto; align-items: baseline; gap: 2px 7px; position: absolute; padding: 6px 8px; color: white; background: rgba(27, 42, 48, 0.91); border-left: 2px solid var(--callout-color); border-radius: 3px; box-shadow: 0 4px 12px rgba(24, 39, 44, 0.16); transform: translate(-50%, -50%); white-space: nowrap; } .twin-callout::after { content: ""; width: var(--leader-length); height: 1px; position: absolute; top: calc(50% + var(--leader-start-y)); left: calc(50% + var(--leader-start-x)); background: var(--callout-color); box-shadow: 0 0 5px color-mix(in srgb, var(--callout-color) 72%, transparent); transform: rotate(var(--leader-angle)); transform-origin: left center; } .twin-callout::before { content: ""; width: 6px; height: 6px; position: absolute; top: calc(50% + var(--leader-dy) - 3px); left: calc(50% + var(--leader-dx) - 3px); border-radius: 50%; background: var(--callout-color); box-shadow: 0 0 0 3px rgba(255, 255, 255, 0.62); } .twin-callout span { font-size: 8px; font-weight: 700; } .twin-callout b { color: #a8ded8; font: 750 10px "SFMono-Regular", Consolas, monospace; } .twin-stage[data-selected-seat="passenger"] .twin-callout b { color: #b9d5f2; } .twin-callout small { grid-column: 1 / -1; color: #9cabb0; font: 7px "SFMono-Regular", Consolas, monospace; } .twin-callout[hidden] { display: none; } .included-angle-callout { border-left-color: var(--amber); } .included-angle-callout b, .twin-stage[data-selected-seat="passenger"] .included-angle-callout b { color: #ffd28d; } .twin-orientation { display: flex; align-items: center; gap: 5px; position: absolute; right: 28px; bottom: 25px; z-index: 2; color: #64747a; font-size: 8px; font-weight: 750; pointer-events: none; } .twin-orientation svg { width: 13px; height: 13px; } .twin-readout { width: 238px; position: absolute; top: 22px; right: 28px; z-index: 3; padding: 15px 0 15px 18px; background: linear-gradient(90deg, rgba(238, 243, 241, 0.12), rgba(238, 243, 241, 0.94) 18%); border-left: 1px solid rgba(174, 189, 184, 0.72); pointer-events: none; } .twin-stage[data-selected-seat="driver"] .twin-readout { right: auto; left: 28px; padding: 15px 18px 15px 0; background: linear-gradient(270deg, rgba(238, 243, 241, 0.12), rgba(238, 243, 241, 0.94) 18%); border-right: 1px solid rgba(174, 189, 184, 0.72); border-left: 0; } .twin-readout-heading, .twin-thermal-row > span { display: flex; align-items: center; } .twin-readout-heading { justify-content: space-between; gap: 10px; padding-bottom: 13px; border-bottom: 1px solid rgba(174, 189, 184, 0.7); } .twin-readout-heading strong, .twin-readout-heading span { display: block; } .twin-readout-heading strong { font-size: 14px; } .twin-readout-heading > div span { margin-top: 2px; color: var(--muted-foreground); font: 9px "SFMono-Regular", Consolas, monospace; } .twin-readout-heading .twin-feedback { display: flex; align-items: center; gap: 7px; color: var(--teal-dark); font: 750 8px "SFMono-Regular", Consolas, monospace; } .twin-feedback i { width: 6px; height: 6px; animation: feedback-pulse 1.8s ease-in-out infinite; } .twin-axis-list { padding-top: 6px; } .twin-axis-list > div { --value: 0%; min-height: 40px; display: grid; grid-template-columns: 1fr auto; align-items: center; gap: 6px; position: relative; color: var(--muted-foreground); font-size: 10px; } .twin-axis-list b { color: var(--blue); font: 700 10px "SFMono-Regular", Consolas, monospace; } .twin-axis-list > div > i { grid-column: 1 / -1; width: 100%; height: 2px; position: relative; overflow: hidden; background: rgba(159, 176, 171, 0.34); } .twin-axis-list > div > i::after { content: ""; width: var(--value); height: 100%; display: block; background: var(--blue); transition: width 260ms ease; } .twin-axis-list > div.fault span, .twin-axis-list > div.fault b { color: var(--red); } .twin-axis-list > div.fault > i::after { background: var(--red); } .twin-thermal-row { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; padding-top: 12px; border-top: 1px solid rgba(174, 189, 184, 0.7); } .twin-thermal-row > span { min-width: 0; display: grid; grid-template-columns: 17px 1fr auto; align-items: center; gap: 6px; height: 42px; padding: 0 8px; color: var(--muted-foreground); background: rgba(255, 255, 255, 0.58); border: 1px solid rgba(203, 215, 211, 0.8); border-radius: 4px; font-size: 9px; } .twin-thermal-row > span > svg { width: 15px; height: 15px; } .twin-thermal-copy { min-width: 0; display: grid; gap: 2px; } .twin-thermal-copy small { color: inherit; font-size: 8px; } .twin-thermal-copy b { color: inherit; font: 700 9px "SFMono-Regular", Consolas, monospace; } .twin-level-meter { height: 12px; display: flex; align-items: end; gap: 2px; } .twin-level-meter i { width: 3px; height: 4px; display: block; background: #c8d2cf; border-radius: 1px 1px 0 0; } .twin-level-meter i:nth-child(2) { height: 7px; } .twin-level-meter i:nth-child(3) { height: 10px; } .twin-thermal-row span.on[data-twin-function="ventilation"] { color: #257bb5; background: rgba(226, 242, 250, 0.94); border-color: rgba(85, 166, 211, 0.5); } .twin-thermal-row span.on[data-twin-function="heating"] { color: #ce5535; background: rgba(255, 235, 226, 0.94); border-color: rgba(222, 112, 75, 0.52); } .twin-thermal-row span.on[data-level="1"] .twin-level-meter i:nth-child(1), .twin-thermal-row span.on[data-level="2"] .twin-level-meter i:nth-child(-n + 2), .twin-thermal-row span.on[data-level="3"] .twin-level-meter i { background: currentColor; } .twin-fallback { display: flex; align-items: center; gap: 8px; position: absolute; left: 28px; bottom: 24px; z-index: 5; color: var(--muted-foreground); font-size: 10px; } .twin-fallback svg { width: 14px; height: 14px; animation: spin 0.9s linear infinite; } .twin-fallback.error { color: var(--red); } .twin-fallback.error svg { animation: none; } .twin-fallback[hidden] { display: none; } .state-band { display: grid; grid-template-columns: minmax(0, 1fr) 260px; gap: 28px; margin-top: 20px; padding: 22px 0; border-top: 1px solid var(--line); border-bottom: 1px solid var(--line); } .section-title-row { justify-content: space-between; gap: 16px; margin-bottom: 13px; } .section-title-row h3, .coverage-section h3 { font-size: 15px; } .simulation-label { color: var(--muted-foreground); font: 700 9px "SFMono-Regular", Consolas, monospace; } .seat-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; } .seat-card { min-height: 240px; padding: 15px; background: var(--surface); border: 1px solid var(--line); border-radius: 6px; } .motion-state-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px 14px; margin-top: 15px; padding-top: 13px; border-top: 1px solid var(--line); } .motion-axis { position: relative; display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 7px; padding-bottom: 7px; overflow: hidden; color: var(--muted-foreground); font-size: 10px; } .motion-axis b { color: var(--blue); font-family: "SFMono-Regular", Consolas, monospace; } .motion-axis::after, .motion-axis i { content: ""; position: absolute; bottom: 0; left: 0; height: 3px; border-radius: 2px; } .motion-axis::after { width: 100%; background: #e3e9e7; } .motion-axis i { z-index: 1; width: 0; background: var(--blue); transition: width 240ms ease; } .motion-axis.fault b, .motion-axis.fault span { color: var(--red); } .motion-axis.fault i { background: var(--red); } .seat-identity { gap: 10px; } .seat-identity > svg { width: 31px; height: 31px; color: var(--blue); stroke-width: 1.5; } .seat-identity strong, .seat-identity span { display: block; } .seat-identity strong { font-size: 14px; } .seat-identity span { margin-top: 2px; color: var(--muted-foreground); font: 10px "SFMono-Regular", Consolas, monospace; } .thermal-states { gap: 7px; margin-top: 15px; } .thermal-states > span { min-width: 0; flex: 1; display: grid; grid-template-columns: 14px 1fr auto; align-items: center; gap: 4px; padding: 6px 7px; color: var(--muted-foreground); background: var(--surface-muted); border: 1px solid #e7ecea; border-radius: 4px; font-size: 10px; } .thermal-states svg { width: 13px; height: 13px; } .thermal-states b { color: var(--muted-foreground); } .thermal-states > span.on[data-function="ventilation"] { color: var(--blue); background: var(--blue-soft); border-color: #c4d8ee; } .thermal-states > span.on[data-function="heating"] { color: var(--amber); background: var(--amber-soft); border-color: #f0d4a2; } .thermal-states > span.on[data-function="massage"] { color: #7654a8; background: #f0eafa; border-color: #d9c9ee; } .thermal-states > span.on b { color: inherit; } .coverage-section { padding-left: 25px; border-left: 1px solid var(--line); } .coverage-section dl { margin: 12px 0 0; } .coverage-section dl div { display: flex; justify-content: space-between; gap: 12px; padding: 8px 0; border-bottom: 1px solid #e4e9e7; font-size: 11px; } .coverage-section dt { color: var(--muted-foreground); } .coverage-section dd { margin: 0; font-weight: 750; } .coverage-section dd.available { color: var(--teal); } .coverage-section dd.simulated { color: var(--blue); } .coverage-section dd.blocked { color: var(--red); } .detail-section { margin-top: 20px; background: var(--surface); border: 1px solid var(--line); box-shadow: var(--shadow); } .tabs { min-height: 48px; display: flex; gap: 2px; padding: 0 14px; border-bottom: 1px solid var(--line); overflow-x: auto; } .tab { min-height: 48px; gap: 7px; padding: 0 13px; color: var(--muted-foreground); background: transparent; border: 0; border-bottom: 2px solid transparent; font-size: 11px; font-weight: 750; white-space: nowrap; cursor: pointer; } .tab.active { color: var(--teal-dark); border-bottom-color: var(--teal); } .tab-panel { min-height: 360px; padding: 20px; } .trace-layout { display: grid; grid-template-columns: minmax(0, 0.9fr) minmax(0, 1.1fr); gap: 28px; } .detail-heading { justify-content: space-between; gap: 12px; margin-bottom: 12px; } .detail-heading h3 { font-size: 13px; } .detail-heading span { color: var(--muted-foreground); font: 10px "SFMono-Regular", Consolas, monospace; } .decision-list { margin: 0; padding: 0; list-style: none; counter-reset: decision; } .decision-list li { counter-increment: decision; display: grid; grid-template-columns: 24px 1fr; gap: 9px; padding: 9px 0; border-bottom: 1px solid #e7ecea; color: #3e4d54; font-size: 12px; line-height: 1.55; } .decision-list li::before { content: counter(decision, decimal-leading-zero); color: var(--teal); font: 750 10px "SFMono-Regular", Consolas, monospace; } .trace-list { border-left: 1px solid var(--line-strong); } .trace-event { position: relative; display: grid; grid-template-columns: 92px 1fr auto; gap: 10px; padding: 7px 0 7px 15px; font-size: 11px; } .trace-event::before { content: ""; position: absolute; left: -4px; top: 13px; width: 7px; height: 7px; background: var(--teal); border: 2px solid white; border-radius: 50%; } .trace-event.failed::before { background: var(--red); } .trace-event code { color: var(--blue); font-size: 10px; } .trace-event span { color: #415159; line-height: 1.45; } .trace-event small { color: var(--muted-foreground); } .validation-block { margin-top: 24px; padding-top: 18px; border-top: 1px solid var(--line); } .validation-list { display: grid; gap: 7px; } .validation-item { display: grid; grid-template-columns: 62px 180px minmax(0, 1fr); gap: 10px; align-items: start; padding: 8px 10px; border-left: 3px solid var(--amber); background: var(--amber-soft); font-size: 11px; } .validation-item.error { border-left-color: var(--red); background: var(--red-soft); } .validation-item b { color: var(--amber); } .validation-item.error b { color: var(--red); } .validation-item code { overflow-wrap: anywhere; color: #55636a; } .empty-line { padding: 18px 0; color: #899499; font-size: 11px; } .code-panel { padding: 0; background: #17232b; } .code-toolbar { min-height: 48px; justify-content: space-between; gap: 12px; padding: 0 15px; color: #d7e0e3; background: #213039; border-bottom: 1px solid #31424b; } .code-toolbar > div { display: flex; align-items: center; gap: 8px; } .code-toolbar strong { font: 11px "SFMono-Regular", Consolas, monospace; } .file-dot { width: 8px; height: 8px; border-radius: 50%; background: var(--amber); } .file-dot.can { background: #3ea8a0; } .icon-button { width: 32px; height: 32px; display: inline-flex; align-items: center; justify-content: center; color: #b8c5c9; background: transparent; border: 0; border-radius: 4px; cursor: pointer; } .icon-button:hover { color: white; background: #31424b; } pre { min-height: 312px; max-height: 520px; margin: 0; padding: 18px; overflow: auto; color: #d8e2e5; background: #17232b; font: 11px/1.65 "SFMono-Regular", Consolas, monospace; tab-size: 2; white-space: pre; } .frame-summary { min-height: 48px; gap: 11px; padding: 9px 15px; color: #d7e0e3; background: #101b21; border-bottom: 1px solid #31424b; font-size: 10px; overflow-x: auto; } .frame-summary span { color: #83959d; } .frame-summary b, .frame-summary code { margin-right: 12px; white-space: nowrap; } .frame-summary code { color: #83d1c9; } .execution-summary { gap: 13px; min-height: 68px; padding: 13px 15px; background: var(--surface-muted); border-left: 4px solid var(--line-strong); } .execution-summary.succeeded { background: var(--teal-soft); border-left-color: var(--teal); } .execution-summary.partial { background: var(--amber-soft); border-left-color: var(--amber); } .execution-summary.failed { background: var(--red-soft); border-left-color: var(--red); } .execution-summary > svg { width: 27px; height: 27px; } .execution-summary strong, .execution-summary span { display: block; } .execution-summary strong { font-size: 13px; } .execution-summary span { margin-top: 3px; color: var(--muted-foreground); font-size: 11px; } .result-list { margin-top: 14px; } .result-item { align-items: flex-start; gap: 12px; padding: 13px 4px; border-bottom: 1px solid var(--line); } .result-item > svg { flex: 0 0 auto; color: var(--teal); } .result-item > div { flex: 1; min-width: 0; } .result-item strong, .result-item span { display: block; } .result-item strong { font-size: 12px; } .result-item span { margin-top: 4px; color: var(--muted-foreground); font-size: 11px; overflow-wrap: anywhere; } .result-item code { flex: 0 0 auto; padding: 4px 6px; color: var(--blue); background: var(--blue-soft); border-radius: 3px; font-size: 10px; } .toast { position: fixed; right: 20px; bottom: 20px; max-width: min(360px, calc(100vw - 40px)); padding: 10px 13px; color: white; background: #213039; border-radius: 5px; box-shadow: var(--shadow); font-size: 11px; opacity: 0; transform: translateY(10px); pointer-events: none; transition: 160ms ease; z-index: 50; } .toast.show { opacity: 1; transform: translateY(0); } /* Compact joint vehicle twin ------------------------------------------------ */ .joint-twin-shell { display: grid; grid-template-columns: minmax(430px, 1.1fr) minmax(360px, 0.9fr); gap: 14px; margin-top: 22px; padding: 18px; background: linear-gradient(145deg, #eef4f2 0%, #f7f9f8 52%, #edf3f5 100%); border: 1px solid #cfdad6; border-radius: 9px; box-shadow: 0 9px 28px rgba(28, 49, 54, 0.06); } .joint-twin-heading { grid-column: 1 / -1; display: flex; align-items: end; justify-content: space-between; gap: 22px; padding: 1px 2px 4px; } .joint-twin-heading h3 { margin: 0; font-size: 18px; } .joint-twin-heading p { margin: 6px 0 0; color: var(--muted-foreground); font-size: 11px; } .joint-scope { display: flex; align-items: center; gap: 5px; flex-wrap: wrap; justify-content: flex-end; } .joint-scope > span { min-height: 28px; display: inline-flex; align-items: center; gap: 5px; padding: 5px 7px; color: #3c565b; background: rgba(255, 255, 255, 0.78); border: 1px solid #d4dfdc; border-radius: 5px; font-size: 9px; font-weight: 800; } .joint-scope svg { width: 13px; height: 13px; color: var(--teal); } .joint-scope > svg { width: 10px; height: 10px; color: #96a5a1; } .joint-twin-shell > .twin-band, .joint-twin-shell > .cabin-band { min-width: 0; margin: 0; background: rgba(255, 255, 255, 0.82); border: 1px solid #d4dedb; border-radius: 7px; overflow: hidden; } .joint-twin-shell > .twin-band { align-self: stretch; } .joint-twin-shell .twin-heading { min-height: 58px; padding: 12px 14px 9px; background: rgba(255, 255, 255, 0.76); border-bottom: 1px solid #d8e1de; } .joint-twin-shell .twin-heading h3 { font-size: 15px; } .twin-focus-badge { min-height: 27px; display: inline-flex; align-items: center; gap: 5px; padding: 4px 7px; color: #2f659c; background: var(--blue-soft); border: 1px solid #c7d9ec; border-radius: 4px; font: 750 8px "SFMono-Regular", Consolas, monospace; } .twin-focus-badge svg { width: 13px; height: 13px; } .joint-twin-shell .twin-stage { height: 430px; min-height: 430px; background: #e8eeec; } .joint-twin-shell .twin-readout { display: block; max-width: 205px; } .joint-twin-shell .twin-seat-label.passenger { left: 18px; bottom: 18px; } .joint-twin-shell .twin-seat-label.driver { right: 18px; left: auto; bottom: 18px; } .vehicle-system-hud { display: grid; gap: 6px; position: absolute; top: 14px; left: 14px; z-index: 5; pointer-events: none; } .vehicle-system-hud > span { min-width: 132px; display: grid; grid-template-columns: 18px minmax(0, 1fr); align-items: center; gap: 1px 7px; padding: 7px 9px; color: #d5e0e3; background: rgba(24, 39, 45, 0.82); border: 1px solid rgba(145, 171, 178, 0.24); border-left: 2px solid #72888e; border-radius: 4px; box-shadow: 0 5px 14px rgba(20, 34, 40, 0.14); backdrop-filter: blur(7px); } .vehicle-system-hud > span.active { border-left-color: #49b8ae; background: rgba(17, 55, 58, 0.88); } .vehicle-system-hud svg { width: 15px; height: 15px; grid-row: 1 / 3; color: #9cc9d5; } .vehicle-system-hud small, .vehicle-system-hud b { display: block; } .vehicle-system-hud small { color: #91a4aa; font-size: 7px; font-weight: 800; } .vehicle-system-hud b { overflow: hidden; color: white; font: 700 8px "SFMono-Regular", Consolas, monospace; text-overflow: ellipsis; white-space: nowrap; } .joint-twin-shell .twin-orientation { right: 16px; bottom: 18px; } .joint-twin-shell [data-callout="legrest_extension"] { display: none !important; } .seat-axis-unavailable { display: none !important; } .joint-twin-shell .twin-callout { min-width: 67px; padding: 5px 6px; background: rgba(24, 39, 45, 0.82); } .joint-twin-shell .twin-callout span, .joint-twin-shell .twin-callout small { font-size: 7px; } .joint-twin-shell .twin-callout b { font-size: 9px; } .joint-twin-shell > .cabin-band { padding: 12px; border-top: 1px solid #d4dedb; border-bottom: 1px solid #d4dedb; } .joint-twin-shell .cabin-heading { align-items: center; margin-bottom: 9px; } .joint-twin-shell .cabin-heading h3 { font-size: 14px; } .joint-twin-shell .cabin-heading .simulation-label { max-width: 210px; text-align: right; font-size: 7px; } .joint-twin-shell .domain-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 9px; } .joint-twin-shell .domain-panel { min-height: 190px; padding: 11px; border-radius: 6px; box-shadow: 0 2px 8px rgba(25, 43, 49, 0.025); } .joint-twin-shell .domain-panel header { grid-template-columns: 30px minmax(0, 1fr) auto; gap: 7px; } .joint-twin-shell .domain-icon { width: 30px; height: 30px; } .joint-twin-shell .climate-display, .joint-twin-shell .roof-visual, .joint-twin-shell .ambient-visual { min-height: 56px; margin-top: 8px; } .joint-twin-shell .climate-display { grid-template-columns: 1fr 58px 1fr; padding: 4px; } .joint-twin-shell .zone-temperature strong { font-size: 20px; } .joint-twin-shell .airflow-visual { height: 43px; } .joint-twin-shell .airflow-visual i:nth-child(1) { height: 8px; } .joint-twin-shell .airflow-visual i:nth-child(2) { height: 12px; } .joint-twin-shell .airflow-visual i:nth-child(3) { height: 17px; } .joint-twin-shell .airflow-visual i:nth-child(4) { height: 22px; } .joint-twin-shell .airflow-visual i:nth-child(5) { height: 27px; } .joint-twin-shell .airflow-visual i:nth-child(6) { height: 33px; } .joint-twin-shell .airflow-visual i:nth-child(7) { height: 39px; } .joint-twin-shell .roof-visual { padding: 6px 12px; } .joint-twin-shell .roof-glass { height: 45px; border-radius: 13px 13px 5px 5px; } .joint-twin-shell .ambient-dashboard-sketch { height: 36px; top: 7px; border-top-width: 3px; border-radius: 10px 10px 4px 4px; } .joint-twin-shell .ambient-dashboard-top { top: 9px; } .joint-twin-shell .ambient-center-screen { height: 16px; top: 12px; border-width: 1px; } .joint-twin-shell .ambient-glovebox { height: 14px; top: 16px; } .joint-twin-shell .ambient-glovebox-lamp { top: 12px; gap: 2px; } .joint-twin-shell .ambient-line { height: 3px; } .joint-twin-shell .ambient-location-label { right: 8%; bottom: 2px; font-size: 6px; } .joint-twin-shell .domain-readouts { gap: 0 10px; margin-top: 5px; } .joint-twin-shell .domain-readouts > div { padding: 4px 0; font-size: 8px; } .joint-seat-panel { position: relative; } .seat-channel-badge { display: inline-flex; align-items: center; margin-top: 7px; padding: 3px 6px; color: #526269; background: #eef3f2; border: 1px solid #d4dedb; border-radius: 999px; font: 700 7px "SFMono-Regular", Consolas, monospace; } .seat-channel-badge[data-source^="physical"] { color: #075e57; background: #e5f4f1; border-color: #abd8d1; } .seat-channel-badge[data-source="unavailable"] { color: #8a4d16; background: #fff4e6; border-color: #f1c99f; } .joint-seat-panel > .simulation-label { display: block; margin-bottom: 8px; color: #2f659c; font-size: 7px; text-align: right; } .joint-seat-panel .seat-identity > svg { width: 26px; height: 26px; } .joint-seat-panel .seat-identity strong { font-size: 13px; } .joint-seat-panel .thermal-states { margin-top: 9px; } .joint-seat-panel .thermal-states > span { padding: 5px 6px; font-size: 8px; } .joint-seat-panel .motion-state-grid { gap: 7px 10px; margin-top: 9px; padding-top: 8px; } .joint-seat-panel .motion-axis { gap: 5px; padding-bottom: 6px; font-size: 8px; } .joint-hardware-boundary { grid-column: 1 / -1; display: grid; grid-template-columns: 170px minmax(0, 1fr); gap: 18px; align-items: center; padding: 12px 14px; background: rgba(255, 255, 255, 0.62); border: 1px solid #d4dedb; border-radius: 6px; } .joint-hardware-boundary h3 { font-size: 13px; } .joint-hardware-boundary > .section-kicker, .joint-hardware-boundary > h3 { grid-column: 1; grid-row: 1; align-self: start; } .joint-hardware-boundary > h3 { margin-top: 18px; } .joint-hardware-boundary dl { grid-column: 2; grid-row: 1; display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 8px; margin: 0; } .joint-hardware-boundary dl div { min-width: 0; display: grid; gap: 5px; align-content: center; padding: 8px 9px; background: #f7f9f8; border: 1px solid #e0e7e4; border-radius: 4px; font-size: 8px; } /* Human-readable configuration cards --------------------------------------- */ #panel-config.config-panel { padding: 20px; background: #f6f8f7; } .config-panel-heading { display: flex; align-items: flex-end; justify-content: space-between; gap: 20px; margin-bottom: 16px; } .config-panel-heading h3 { margin: 0; font-size: 17px; } .config-panel-heading p { margin: 5px 0 0; color: var(--muted-foreground); font-size: 10px; } .config-actions { display: flex; gap: 7px; } .config-action { min-height: 32px; display: inline-flex; align-items: center; gap: 6px; padding: 6px 9px; color: #3e5359; background: white; border: 1px solid #ccd8d4; border-radius: 4px; font-size: 9px; font-weight: 750; cursor: pointer; } .config-action:hover { color: var(--teal-dark); border-color: #94bdb7; } .config-action svg { width: 13px; height: 13px; } .config-card-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; } .config-empty { grid-column: 1 / -1; min-height: 190px; display: grid; place-items: center; align-content: center; gap: 7px; color: var(--muted-foreground); background: white; border: 1px dashed #c8d4d0; border-radius: 6px; text-align: center; } .config-empty svg { width: 28px; height: 28px; color: #8da19c; } .config-empty strong { color: #3c4e54; font-size: 13px; } .config-empty span { max-width: 430px; font-size: 10px; } .config-scene-summary { grid-column: 1 / -1; min-height: 62px; display: flex; align-items: center; justify-content: space-between; gap: 20px; padding: 10px 12px; color: white; background: linear-gradient(108deg, #19353a, #28545a); border-radius: 6px; } .config-scene-copy, .config-scene-stats, .config-card-identity, .config-hardware-route { display: flex; align-items: center; } .config-scene-copy { gap: 10px; } .config-scene-icon { width: 36px; height: 36px; display: grid; place-items: center; color: #bce7e1; background: rgba(255, 255, 255, 0.08); border: 1px solid rgba(255, 255, 255, 0.16); border-radius: 5px; } .config-scene-copy strong, .config-scene-copy span { display: block; } .config-scene-copy strong { font-size: 12px; } .config-scene-copy span { margin-top: 3px; color: #aac2c5; font-size: 8px; } .config-scene-stats { gap: 20px; } .config-scene-stats > span { display: grid; justify-items: end; gap: 2px; } .config-scene-stats b { color: #bce7e1; font: 750 15px "SFMono-Regular", Consolas, monospace; } .config-scene-stats small { color: #aac2c5; font-size: 7px; } .config-card { --config-accent: var(--teal); min-width: 0; overflow: hidden; background: white; border: 1px solid #d6dfdc; border-top: 3px solid var(--config-accent); border-radius: 6px; box-shadow: 0 4px 14px rgba(25, 43, 49, 0.045); } .config-card.config-seat { --config-accent: #3269a8; } .config-card.config-climate { --config-accent: #08766e; } .config-card.config-ambient { --config-accent: #c07316; } .config-card.config-roof { --config-accent: #687a96; } .config-card-header { min-height: 57px; display: flex; align-items: center; justify-content: space-between; gap: 10px; padding: 10px 12px; border-bottom: 1px solid #e5ebe9; } .config-card-identity { min-width: 0; gap: 9px; } .config-card-icon { width: 32px; height: 32px; flex: 0 0 auto; display: grid; place-items: center; color: var(--config-accent); background: color-mix(in srgb, var(--config-accent) 10%, white); border-radius: 5px; } .config-card-icon svg { width: 16px; height: 16px; } .config-card-identity small, .config-card-identity strong { display: block; } .config-card-identity small { margin-bottom: 3px; color: var(--muted-foreground); font: 7px "SFMono-Regular", Consolas, monospace; } .config-card-identity strong { overflow: hidden; font-size: 11px; text-overflow: ellipsis; white-space: nowrap; } .config-domain-badge { flex: 0 0 auto; padding: 4px 6px; color: var(--config-accent); background: color-mix(in srgb, var(--config-accent) 9%, white); border-radius: 3px; font-size: 8px; font-weight: 800; } .config-object-block, .config-parameters-block, .config-hardware-block { padding: 10px 12px; border-bottom: 1px solid #e8edeb; } .config-block-label { display: block; margin-bottom: 7px; color: #82908d; font-size: 8px; font-weight: 800; } .config-object-name, .config-object-path { display: block; } .config-object-name { font-size: 13px; } .config-object-path { margin-top: 4px; color: #71807d; font: 8px "SFMono-Regular", Consolas, monospace; } .config-parameter-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 6px; } .config-parameter { min-width: 0; display: grid; gap: 3px; padding: 7px 8px; background: #f6f8f7; border: 1px solid #e4eae8; border-radius: 4px; } .config-parameter > span { color: var(--muted-foreground); font-size: 8px; } .config-parameter > strong { display: flex; align-items: center; gap: 5px; color: var(--config-accent); font: 750 11px "SFMono-Regular", Consolas, monospace; overflow-wrap: anywhere; } .config-color-swatch { width: 10px; height: 10px; flex: 0 0 auto; border: 1px solid rgba(23, 35, 43, 0.22); border-radius: 2px; } .config-hardware-block { background: #fbfcfc; } .config-hardware-route { gap: 7px; } .config-route-node { min-width: 0; flex: 1; padding: 7px 8px; background: white; border: 1px solid #dce5e2; border-radius: 4px; } .config-route-node.target { border-color: color-mix(in srgb, var(--config-accent) 34%, #dce5e2); } .config-route-node small, .config-route-node strong { display: block; } .config-route-node small { margin-bottom: 3px; color: var(--muted-foreground); font-size: 7px; } .config-route-node strong { overflow: hidden; font: 700 8px "SFMono-Regular", Consolas, monospace; text-overflow: ellipsis; white-space: nowrap; } .config-route-arrow { width: 16px; flex: 0 0 auto; color: var(--config-accent); } .config-route-arrow > svg { width: 14px; height: 14px; } .config-signal-list { display: flex; flex-wrap: wrap; gap: 4px; margin-top: 7px; } .config-signal-list code { padding: 3px 4px; color: #40575c; background: #edf2f0; border-radius: 2px; font-size: 7px; } .config-signal-list .config-signal-more { color: var(--config-accent); } .config-unmapped-note { color: var(--amber); font-size: 8px; } .config-card-footer { min-height: 35px; display: flex; align-items: center; gap: 6px; padding: 7px 12px; color: #768480; background: #f7f9f8; font-size: 7px; } .config-card-footer span { padding-right: 6px; border-right: 1px solid #dce3e1; } .config-card-footer span:last-child { padding-right: 0; border-right: 0; } .config-source-details { margin-top: 14px; overflow: hidden; background: #17232b; border: 1px solid #31424b; border-radius: 6px; } .config-source-details summary { min-height: 44px; display: flex; align-items: center; justify-content: space-between; gap: 15px; padding: 8px 12px; color: #d7e0e3; background: #213039; cursor: pointer; list-style: none; } .config-source-details summary::-webkit-details-marker { display: none; } .config-source-details summary > span { display: inline-flex; align-items: center; gap: 7px; font-size: 9px; font-weight: 750; } .config-source-details summary svg { width: 13px; height: 13px; color: #83d1c9; } .config-source-details summary small { color: #93a4aa; font: 8px "SFMono-Regular", Consolas, monospace; } .config-source-details:not([open]) #configCode { display: none; } /* One-page orchestration result workspace ---------------------------------- */ .main-panel { overflow: visible; } .result-workspace.detail-section { margin-top: 22px; background: transparent; border: 0; box-shadow: none; } .result-workspace-heading { display: flex; align-items: flex-end; justify-content: space-between; gap: 22px; margin-bottom: 12px; padding: 2px; } .result-workspace-heading h3, .workspace-panel-title h3 { margin: 0; } .result-workspace-heading h3 { font-size: 18px; } .result-workspace-heading p, .workspace-panel-title p { margin: 5px 0 0; color: var(--muted-foreground); font-size: 10px; } .result-workspace-badge { min-height: 29px; display: inline-flex; align-items: center; gap: 6px; padding: 5px 8px; color: #456066; background: white; border: 1px solid #cedad6; border-radius: 5px; font: 750 8px "SFMono-Regular", Consolas, monospace; } .result-workspace-badge svg { width: 13px; height: 13px; color: var(--teal); } .result-nav.tabs { min-height: 0; display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 8px; position: sticky; top: 78px; z-index: 12; padding: 9px; background: rgba(244, 247, 246, 0.94); border: 1px solid #d3ddda; border-radius: 7px; box-shadow: 0 6px 20px rgba(25, 43, 49, 0.07); backdrop-filter: blur(12px); overflow: visible; } .result-nav .tab { min-width: 0; min-height: 60px; display: grid; grid-template-columns: 21px 22px minmax(0, 1fr) 13px; align-items: center; gap: 7px; padding: 8px 9px; color: #53656b; background: white; border: 1px solid #dce4e1; border-radius: 5px; text-align: left; transition: border-color 160ms ease, background 160ms ease, transform 160ms ease; } .result-nav .tab:hover { color: var(--teal-dark); border-color: #a9c9c3; transform: translateY(-1px); } .result-nav .tab.active { color: var(--teal-dark); background: #edf7f5; border-color: #8fc0b8; border-bottom-color: #8fc0b8; } .result-nav .tab-index { color: #94a29e; font: 750 8px "SFMono-Regular", Consolas, monospace; } .result-nav .tab > svg { width: 16px; height: 16px; } .result-nav .tab > svg:last-child { width: 11px; height: 11px; color: #99a6a2; } .tab-copy { min-width: 0; display: grid; gap: 3px; } .tab-copy strong { overflow: hidden; color: inherit; font-size: 10px; text-overflow: ellipsis; white-space: nowrap; } .tab-copy small { overflow: hidden; color: #7c8a87; font: 7px "SFMono-Regular", Consolas, monospace; text-overflow: ellipsis; white-space: nowrap; } .result-workspace .tab-panel, .result-workspace .tab-panel[hidden] { min-height: 0; display: block; margin-top: 12px; padding: 20px; background: white; border: 1px solid #d7e0dd; border-radius: 7px; box-shadow: 0 6px 18px rgba(25, 43, 49, 0.045); scroll-margin-top: 160px; transition: border-color 180ms ease, box-shadow 180ms ease; } .result-workspace .tab-panel.navigation-focus { border-color: #70aaa1; box-shadow: 0 0 0 3px rgba(8, 118, 110, 0.1), 0 8px 22px rgba(25, 43, 49, 0.07); } .workspace-panel-title { display: flex; align-items: flex-end; justify-content: space-between; gap: 18px; margin-bottom: 17px; padding-bottom: 13px; border-bottom: 1px solid #e1e7e5; } .workspace-panel-title h3 { font-size: 16px; } .workspace-panel-state { flex: 0 0 auto; padding: 5px 7px; color: #64747a; background: #edf1f0; border-radius: 4px; font: 800 8px "SFMono-Regular", Consolas, monospace; } .workspace-panel-state.succeeded { color: var(--teal-dark); background: var(--teal-soft); } .workspace-panel-state.partial { color: var(--amber); background: var(--amber-soft); } .workspace-panel-state.failed { color: var(--red); background: var(--red-soft); } .result-workspace #panel-config.config-panel { padding: 20px; background: #f6f8f7; } .result-workspace .config-panel-heading { padding-bottom: 13px; border-bottom: 1px solid #dfe6e3; } .plan-panel .frame-summary { min-height: 50px; border: 1px solid #31424b; border-radius: 5px; } .plan-source-details { margin-top: 10px; } .result-panel .execution-summary { border-radius: 5px; } @keyframes spin { to { transform: rotate(360deg); } } @keyframes feedback-pulse { 50% { opacity: 0.42; } } @media (max-width: 1050px) { .workspace { grid-template-columns: 310px minmax(0, 1fr); } .state-band { grid-template-columns: 1fr; } .domain-grid { grid-template-columns: 1fr 1fr; } .ambient-panel { grid-column: 1 / -1; } .coverage-section { padding: 0; border-left: 0; } .trace-layout { grid-template-columns: 1fr; } .joint-twin-shell { grid-template-columns: 1fr; } .joint-twin-shell > .twin-band, .joint-twin-shell > .cabin-band { grid-column: 1; } .joint-hardware-boundary dl { grid-template-columns: repeat(3, minmax(0, 1fr)); } } @media (max-width: 760px) { .workspace { display: block; } .command-panel { padding: 20px 16px; border-right: 0; border-bottom: 1px solid var(--line); } .main-panel { padding: 20px 14px 32px; } .joint-twin-shell { gap: 11px; margin-top: 18px; padding: 11px; } .joint-twin-heading, .config-panel-heading, .result-workspace-heading, .workspace-panel-title { align-items: flex-start; flex-direction: column; } .joint-scope { justify-content: flex-start; } .joint-twin-shell .twin-stage { height: 350px; min-height: 350px; display: block; } .joint-twin-shell #seatTwinCanvas { height: 100%; min-height: 350px; flex-basis: auto; } .vehicle-system-hud { top: 10px; left: 10px; gap: 4px; } .vehicle-system-hud > span { min-width: 116px; padding: 5px 7px; } .joint-twin-shell .domain-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } .joint-hardware-boundary { grid-template-columns: 1fr; } .joint-hardware-boundary dl { grid-column: 1; grid-row: 2; grid-template-columns: repeat(2, minmax(0, 1fr)); } #panel-config.config-panel { padding: 14px; } .config-actions { width: 100%; } .config-action { flex: 1; justify-content: center; } .config-card-grid { grid-template-columns: 1fr; } .result-nav.tabs { grid-template-columns: repeat(2, minmax(0, 1fr)); top: 68px; } .result-workspace .tab-panel, .result-workspace #panel-config.config-panel { padding: 14px; scroll-margin-top: 220px; } .twin-band { margin-right: -14px; margin-left: -14px; } .twin-heading { padding-right: 14px; padding-left: 14px; } .twin-stage { height: auto; min-height: 0; display: flex; flex-direction: column; } #seatTwinCanvas { height: 370px; flex: 0 0 370px; } .twin-stage[data-selected-seat] .twin-readout { width: auto; position: static; right: auto; left: auto; margin: 0 14px 14px; padding: 12px; background: rgba(238, 243, 241, 0.92); border: 1px solid rgba(174, 189, 184, 0.82); } .twin-callout { min-width: 64px; padding: 5px 6px; } .twin-callout span { font-size: 7px; } .twin-callout b { font-size: 9px; } .twin-callout small { font-size: 6px; } .included-angle-callout { top: 38px !important; transform: none; } [data-callout="backrest_included_angle"] { left: 14px !important; } [data-callout="legrest_included_angle"] { right: 14px; left: auto !important; } .included-angle-callout::before, .included-angle-callout::after { display: none; } .twin-orientation { top: 10px; right: 12px; bottom: auto; } .twin-axis-list { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px; padding: 8px 0 10px; } .twin-axis-list > div { min-height: 58px; display: grid; grid-template-columns: 1fr; align-content: space-between; gap: 3px; } .twin-axis-list > div > i { grid-column: 1; } .twin-seat-label { display: none; } .request-header { align-items: flex-start; } .domain-grid { grid-template-columns: 1fr; } .ambient-panel { grid-column: auto; } .matrix-stat { padding-left: 12px; } .seat-grid { grid-template-columns: 1fr; } .tabs { padding: 0 5px; } .tab { padding: 0 9px; } .tab-panel { padding: 15px; } .code-panel { padding: 0; } .validation-item { grid-template-columns: 56px 1fr; } .validation-item span { grid-column: 1 / -1; } .result-item { display: grid; grid-template-columns: 20px 1fr; } .result-item code { grid-column: 2; justify-self: start; } } @media (max-width: 460px) { .request-header { display: block; } .twin-heading { align-items: flex-start; } .twin-heading h3 { font-size: 15px; } .joint-twin-heading p { line-height: 1.5; } .joint-scope > svg { display: none; } .result-workspace-badge { max-width: 100%; white-space: normal; } .result-nav .tab { min-height: 54px; grid-template-columns: 18px 18px minmax(0, 1fr); padding: 7px; } .result-nav .tab > svg:last-child { display: none; } .joint-twin-shell .domain-grid { grid-template-columns: 1fr; } .joint-hardware-boundary dl { grid-template-columns: 1fr; } .config-scene-summary { align-items: flex-start; flex-direction: column; } .config-scene-stats { width: 100%; justify-content: space-between; } .config-scene-stats > span { justify-items: start; } .twin-seat-button { min-width: 46px; padding: 0 8px; } .twin-stage { height: auto; min-height: 0; } #seatTwinCanvas { height: 350px; flex-basis: 350px; } .twin-readout-heading .twin-feedback { font-size: 7px; } .twin-axis-list > div { font-size: 9px; } .matrix-stat { margin-top: 14px; padding: 10px 0 0; border-left: 0; border-top: 1px solid var(--line); } .thermal-states { display: grid; grid-template-columns: 1fr 1fr; } .trace-event { grid-template-columns: 80px 1fr; } .trace-event small { grid-column: 2; } } .mode-cycle-badge { margin-left: 2px; padding: 2px 6px; border-radius: 999px; background: rgba(89, 214, 255, 0.12); color: #8be3ff; font-size: 10px; letter-spacing: 0.02em; } .dynamic-mode-state { display: flex; align-items: center; gap: 8px; margin: 10px 0; padding: 9px 11px; border: 1px solid rgba(126, 160, 194, 0.2); border-radius: 10px; color: #90a7bc; background: rgba(13, 27, 41, 0.55); } .dynamic-mode-state b { margin-left: auto; color: #b9cad8; font-size: 12px; } .dynamic-mode-state.running { border-color: rgba(89, 214, 255, 0.48); color: #8be3ff; box-shadow: inset 0 0 20px rgba(89, 214, 255, 0.06); } .dynamic-mode-state.running b { color: #e0f8ff; } /* Android PAD, touch and installable-app refinements ---------------------- */ .execution-mode-options { grid-template-columns: repeat(3, minmax(0, 1fr)); } .vehicle-transport-options { grid-template-columns: repeat(2, minmax(0, 1fr)); } .vehicle-transport-options .mode-option[data-connection-state="offline"] { color: var(--muted-foreground); } .vehicle-transport-options .mode-option[data-connection-state="online"]::after { content: ""; width: 7px; height: 7px; margin-left: 4px; border-radius: 50%; background: #2ccf83; box-shadow: 0 0 8px rgba(44, 207, 131, 0.65); } .simulation-fault-field select { width: 100%; min-height: 44px; padding: 0 11px; color: var(--ink); background: var(--surface-muted); border: 1px solid var(--line-strong); border-radius: 6px; font: inherit; font-size: 13px; font-weight: 700; } @supports (min-height: 100dvh) { body { min-height: 100dvh; } .workspace { min-height: calc(100dvh - 70px); } } @media (pointer: coarse) { button, select, input, .segment, .mode-option, .tab { min-height: 48px; } button:hover, .segment:hover, .mode-option:hover { transform: none; } textarea { font-size: 16px; } } @media (max-width: 900px) { .workspace { display: block; } .command-panel { width: auto; max-height: none; position: static; padding: 22px max(18px, env(safe-area-inset-right)) 24px max(18px, env(safe-area-inset-left)); overflow: visible; border-right: 0; border-bottom: 1px solid var(--line); } .main-panel { padding-right: max(16px, env(safe-area-inset-right)); padding-bottom: max(42px, env(safe-area-inset-bottom)); padding-left: max(16px, env(safe-area-inset-left)); } .gesture-drawer { width: min(520px, 100vw); padding-right: max(18px, env(safe-area-inset-right)); padding-bottom: max(22px, env(safe-area-inset-bottom)); padding-left: max(18px, env(safe-area-inset-left)); } } @media (max-width: 620px) { .execution-mode-options { grid-template-columns: 1fr; } } @media (orientation: landscape) and (max-height: 720px) and (min-width: 901px) { .workspace { min-height: calc(100dvh - 58px); } .command-panel, .main-panel { padding-top: 18px; } } /* Final semantic theme layer --------------------------------------------- Keep legacy modules and every overlay on the shared shadcn token system. */ .mode-gallery-backdrop, .mode-editor-backdrop { background: color-mix(in oklch, var(--foreground) 48%, transparent); } .mode-gallery, .mode-editor { color: var(--popover-foreground); background: radial-gradient(circle at 98% 2%, color-mix(in oklch, var(--primary) 10%, transparent), transparent 17rem), var(--popover); border-color: var(--border); box-shadow: 0 30px 90px color-mix(in oklch, var(--foreground) 22%, transparent); } .mode-gallery-header h2, .mode-gallery-group > header strong, .mode-gallery-card, .mode-gallery-empty strong, .mode-editor-header h2, .mode-editor-field input, .mode-editor-field textarea, .mode-editor-flow-preview, .mode-editor-command-card > summary > code { color: var(--foreground); } .mode-gallery-header p, .mode-gallery-group > header small, .mode-gallery-state, .mode-gallery-card-description, .mode-gallery-empty, .mode-gallery-footer, .mode-editor-header p, .mode-editor-field, .mode-editor-flow-preview.empty, .mode-editor-command-meta strong, .mode-editor-message-sequence > header, .mode-editor-message-sequence > p, .mode-editor-status { color: var(--muted-foreground); } .mode-gallery-close, .mode-gallery-group, .mode-gallery-card, .mode-gallery-empty, .mode-editor-header button, .mode-editor-field input, .mode-editor-field textarea, .mode-editor-command-card, .mode-editor-actions button, .save-mode-composer, .save-mode-composer input { background: var(--card); border-color: var(--border); } .mode-gallery-close, .mode-editor-header button, .mode-editor-actions button { color: var(--muted-foreground); } .mode-gallery-close:hover, .mode-editor-header button:hover, .mode-editor-header button:focus-visible, .mode-editor-actions button:hover, .mode-editor-actions button:focus-visible { color: var(--accent-foreground); background: var(--accent); border-color: var(--ring); } .mode-gallery-summary, .mode-gallery-card-icon, .mode-editor-flow, .mode-editor-command-card, .mode-editor-message-sequence, .mode-editor-actions .mode-editor-execute { background: var(--muted); border-color: var(--border); } .mode-gallery-summary, .mode-gallery-summary strong, .mode-gallery-card-icon, .mode-editor-flow header, .mode-editor-flow header svg, .mode-editor-flow header b, .mode-editor-actions .mode-editor-execute { color: var(--primary); } .mode-gallery-edit { color: var(--primary); background: color-mix(in oklch, var(--primary) 9%, var(--card)); border-color: color-mix(in oklch, var(--primary) 24%, var(--border)); } .mode-gallery-edit:hover { color: var(--primary-foreground); background: var(--primary); border-color: var(--primary); } .mode-gallery-delete { color: var(--destructive); background: color-mix(in oklch, var(--destructive) 8%, var(--card)); border-color: color-mix(in oklch, var(--destructive) 24%, var(--border)); } .mode-gallery-delete:hover { color: var(--primary-foreground); background: var(--destructive); border-color: var(--destructive); } .mode-gallery-edit:focus-visible, .mode-gallery-delete:focus-visible, .mode-editor-field input:focus, .mode-editor-field textarea:focus, .save-mode-composer input:focus { border-color: var(--ring); outline-color: var(--ring); box-shadow: 0 0 0 3px color-mix(in oklch, var(--ring) 20%, transparent); } .mode-gallery-card:hover { border-color: color-mix(in oklch, var(--primary) 28%, var(--border)); box-shadow: 0 8px 20px color-mix(in oklch, var(--primary) 9%, transparent); } .mode-gallery-card.running { color: var(--primary); background: color-mix(in oklch, var(--primary) 10%, var(--card)); border-color: color-mix(in oklch, var(--primary) 36%, var(--border)); box-shadow: 0 0 0 3px color-mix(in oklch, var(--primary) 9%, transparent); } .mode-gallery-card.running .mode-gallery-card-icon, .mode-gallery-card.running .mode-gallery-state { color: var(--primary); background: var(--accent); } .mode-gallery-card.succeeded { color: color-mix(in oklch, var(--chart-3) 72%, var(--foreground)); background: color-mix(in oklch, var(--chart-1) 14%, var(--card)); border-color: color-mix(in oklch, var(--chart-3) 32%, var(--border)); } .mode-gallery-card.succeeded .mode-gallery-state { color: var(--chart-3); } .mode-gallery-card.failed { color: var(--destructive); background: color-mix(in oklch, var(--destructive) 9%, var(--card)); border-color: color-mix(in oklch, var(--destructive) 32%, var(--border)); } .mode-gallery-card.failed .mode-gallery-state { color: var(--destructive); } .mode-editor-flow header { background: color-mix(in oklch, var(--primary) 7%, var(--card)); border-bottom: 1px solid var(--border); } .mode-editor-flow-tools button { color: var(--primary); background: var(--card); border-color: var(--border); } .mode-editor-flow-tools button:hover, .mode-editor-flow-tools button:focus-visible { color: var(--primary-foreground); background: var(--primary); border-color: var(--primary); } .mode-editor-command-meta b, .mode-editor-command-card[data-can-channel="CAN0"] .mode-editor-command-meta b { color: var(--primary); background: var(--accent); border-color: var(--border); } .mode-editor-message-sequence li { color: var(--primary-foreground); background: color-mix(in oklch, var(--foreground) 90%, var(--background)); border-color: color-mix(in oklch, var(--primary) 24%, transparent); } .mode-editor-message-sequence li > div, .mode-editor-message-sequence li > div code, .mode-editor-message-sequence li > pre { color: var(--primary-foreground); background: transparent; } .mode-editor-actions .mode-editor-complete { color: var(--primary-foreground); background: var(--primary); border-color: var(--primary); } .domain-panel, .seat-card, .config-card, .result-panel, .tab-panel { color: var(--card-foreground); background: var(--card); border-color: var(--border); } .domain-icon, .config-card-icon, .config-scene-icon, .mode-gallery-card-icon { color: var(--primary); background: var(--accent); border-color: color-mix(in oklch, var(--primary) 18%, var(--border)); } .gesture-drawer { color: var(--card-foreground); background: var(--card); border-color: var(--border); box-shadow: -20px 0 60px color-mix(in oklch, var(--foreground) 18%, transparent); } .gesture-drawer-header h2, .gesture-now strong, .gesture-guide-card strong, .gesture-card-heading strong { color: var(--foreground); } .gesture-drawer-header p, .gesture-status-strip, .gesture-now span, .gesture-guide-card p, .gesture-card-heading span { color: var(--muted-foreground); } .gesture-state-pill, .gesture-now, .gesture-guide-card, .gesture-customize { color: var(--secondary-foreground); background: var(--secondary); border-color: var(--border); } .gesture-state-pill.armed, .gesture-state-pill.moving { color: var(--primary); background: color-mix(in oklch, var(--primary) 9%, var(--card)); border-color: color-mix(in oklch, var(--primary) 28%, var(--border)); } .gesture-camera-empty > span, .gesture-live-badge { color: var(--primary); background: color-mix(in oklch, var(--primary) 10%, var(--popover)); border-color: color-mix(in oklch, var(--primary) 28%, var(--border)); } .toast { color: var(--popover-foreground); background: var(--popover); border: 1px solid var(--border); border-radius: var(--radius); box-shadow: 0 14px 36px color-mix(in oklch, var(--foreground) 16%, transparent); } .mode-cycle-badge, .dynamic-mode-state { color: var(--primary); background: color-mix(in oklch, var(--primary) 9%, var(--card)); border-color: color-mix(in oklch, var(--primary) 24%, var(--border)); } .dynamic-mode-state b, .dynamic-mode-state.running b { color: var(--foreground); } .vehicle-transport-options .mode-option[data-connection-state="online"]::after { background: var(--status-online); box-shadow: 0 0 0 3px color-mix(in oklch, var(--status-online) 18%, transparent); } /* Compact, consistent control typography and explicit connection states. */ .execution-mode-options { grid-template-columns: repeat(2, minmax(0, 1fr)); } .vehicle-transport-options .mode-option[data-connection-state]::after { content: ""; width: 8px; height: 8px; flex: 0 0 8px; margin-left: 4px; border: 1px solid color-mix(in oklch, var(--card) 72%, transparent); border-radius: 50%; } .vehicle-transport-options .mode-option[data-connection-state="offline"]::after { background: var(--status-offline); box-shadow: 0 0 0 3px color-mix(in oklch, var(--status-offline) 15%, transparent); } .mode-rail > .mode-rail-bar { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; align-items: center; gap: 9px; } .mode-rail-title { color: var(--foreground); font-size: var(--text-label); font-weight: 850; white-space: nowrap; } .mode-rail-toggle, .mode-rail-bar > .mode-gallery-toggle { min-height: 38px; display: inline-flex; align-items: center; gap: 7px; padding: 7px 11px; color: var(--foreground); background: var(--card); border: 1px solid var(--border); border-radius: var(--radius); } .mode-rail-toggle { justify-content: space-between; } .mode-rail-toggle svg, .mode-rail-bar > .mode-gallery-toggle svg { width: 16px; height: 16px; } .mode-rail-toggle svg:last-child { transition: transform 160ms ease; } .mode-rail-toggle[aria-expanded="true"] svg:last-child { transform: rotate(180deg); } .mode-rail-content[hidden] { display: none !important; } .mode-rail-content { width: 100%; max-height: clamp(180px, calc(100dvh - 210px), 420px); position: absolute; top: calc(100% + 8px); right: 0; left: 0; display: block; margin-top: 0; padding: 10px; overflow-x: hidden; overflow-y: auto; overscroll-behavior: contain; scrollbar-gutter: stable; background: var(--card); border: 1px solid var(--border); border-radius: var(--radius); box-shadow: var(--soft-shadow); } .mode-rail-actions { display: flex; align-items: center; gap: 8px; } .mode-rail-actions > button { min-height: 38px; display: inline-flex; align-items: center; justify-content: center; gap: 7px; padding: 7px 11px; color: var(--primary); background: var(--card); border: 1px solid color-mix(in oklch, var(--primary) 24%, var(--border)); border-radius: var(--radius); white-space: nowrap; } .mode-rail-content .mode-chips { width: 100%; display: grid; grid-template-columns: repeat(auto-fit, minmax(112px, 1fr)); gap: 8px; overflow: visible; } .mode-rail-content .mode-chips > button { width: 100%; min-width: 0; } .mode-gallery-add-card { border-style: dashed; border-color: color-mix(in oklch, var(--primary) 42%, var(--border)); color: var(--card-foreground); background: color-mix(in oklch, var(--primary) 5%, var(--card)); } .mode-gallery-add-card .mode-gallery-card-icon { color: var(--primary); background: color-mix(in oklch, var(--primary) 12%, var(--card)); } .mode-gallery-add-card:hover, .mode-gallery-add-card:focus-visible { border-color: var(--primary); background: var(--accent); } @media (max-width: 760px) { .mode-rail > .mode-rail-bar { grid-template-columns: auto minmax(0, 1fr); } .mode-rail-actions { grid-column: 1 / -1; justify-content: flex-end; } }