/* Canonical dashboard entry point. Component rules are imported once here so the cascade has one predictable owner. The consolidation layer is at EOF. */ @import url("./dashboard-shell.css"); @import url("./dashboard-experience.css"); @import url("./control-panel.css"); @import url("./operator_console.css"); @import url("./embodiment-self-model.css"); @import url("./wesen.css"); @import url("./wesen-adaptive.css"); @import url("./wesen-anatomy-v3.css"); @import url("./wesen-organism.css"); @import url("./wesen-neural-symbiosis.css"); /* ============================================================================ Brain-5D Operator Dashboard – Complete Stylesheet This file combines all dashboard styles including: - Base theme (dark, gradient, cards) - Dashboard metrics and panels - Tab navigation - Control Panel (runtime control, self-organization) - Operator Console (commands, proposals, log) - Documentation Browser (tree, viewer, search) - Responsive design for all screen sizes ============================================================================ */ /* ============================================================================ DESIGN TOKENS (Root Variables) ============================================================================ */ :root { color-scheme: dark; /* Core colors */ --bg: #071019; --panel: #0d1b27; --line: #1c4155; --accent: #ff9f1c; --accent2: #40e0d0; --text: #edf7fa; --muted: #8eb2c1; --danger: #ff5d73; /* Extended palette */ --color-primary: #4a7cf7; --color-primary-hover: #6a9cff; --color-success: #24b46e; --color-success-hover: #2dd485; --color-warning: #e6aa28; --color-warning-hover: #f0c040; --color-danger: #dc3545; --color-danger-hover: #f05060; --color-info: #17a2b8; --color-info-hover: #28b8d0; /* Shadows */ --shadow-card: 0 10px 30px rgba(0, 0, 0, 0.18); --shadow-focus: 0 0 0 3px rgba(74, 124, 247, 0.3); /* Radius */ --radius-card: 16px; --radius-medium: 10px; --radius-small: 8px; --radius-pill: 999px; /* Typography */ --font-family: Inter, ui-sans-serif, system-ui, sans-serif; --font-mono: 'SF Mono', 'Cascadia Code', 'Consolas', monospace; /* Transitions */ --transition-fast: 0.15s ease; --transition-medium: 0.25s ease; } /* Light theme overrides */ body[data-theme="light"] { color-scheme: light; --bg: #f4f7f9; --panel: #ffffff; --line: #d0dce3; --text: #0d1b27; --muted: #4a6572; --accent: #d97706; --accent2: #0d9488; --danger: #dc2626; --shadow-card: 0 4px 12px rgba(0, 0, 0, 0.08); } body[data-theme="light"] .card, body[data-theme="light"] .control-card { background: linear-gradient(145deg, rgba(255, 255, 255, .98), rgba(245, 248, 250, .98)); border-color: var(--line); } body[data-theme="light"] .topbar, body[data-theme="light"] .site-footer { background: rgba(255, 255, 255, 0.95); border-color: var(--line); } body[data-theme="light"] .tab-nav { background: rgba(255, 255, 255, 0.7); border-color: var(--line); } body[data-theme="light"] { background: radial-gradient(circle at 10% 0%, #e0f2fe 0, var(--bg) 35%); } /* ============================================================================ BASE RESET & BODY ============================================================================ */ * { box-sizing: border-box; } body { margin: 0; background: radial-gradient(circle at 10% 0%, #123148 0, var(--bg) 35%); color: var(--text); font-family: var(--font-family); min-height: 100vh; padding-bottom: 56px; /* space for fixed footer */ } /* ============================================================================ TOPBAR ============================================================================ */ .topbar { display: flex; justify-content: space-between; align-items: center; padding: 24px 32px; border-bottom: 1px solid var(--line); background: rgba(7, 16, 25, .85); position: sticky; top: 0; backdrop-filter: blur(12px); z-index: 5; } .eyebrow { margin: 0; color: var(--accent); font-weight: 800; letter-spacing: .18em; text-transform: uppercase; font-size: 0.75rem; } .topbar h1 { margin: 4px 0 0; font-size: 24px; font-weight: 600; } .status-pill { border: 1px solid var(--line); border-radius: var(--radius-pill); padding: 8px 14px; color: var(--muted); font-size: 0.85rem; font-weight: 500; } .status-pill.online { color: var(--accent2); border-color: var(--accent2); } .status-pill.error { color: var(--danger); border-color: var(--danger); } .icon-btn { background: rgba(255, 255, 255, 0.05); border: 1px solid var(--line); border-radius: var(--radius-pill); color: var(--text); cursor: pointer; font-size: 1rem; padding: 8px 12px; transition: background var(--transition-fast), border-color var(--transition-fast); } .icon-btn:hover { background: rgba(255, 255, 255, 0.1); border-color: var(--accent2); } /* ============================================================================ MAIN LAYOUT ============================================================================ */ main { padding: 24px 32px 40px; max-width: 1600px; margin: auto; } /* ============================================================================ TAB NAVIGATION ============================================================================ */ .tab-nav { display: flex; gap: 4px; background: rgba(255, 255, 255, 0.04); padding: 6px 12px; border-radius: 12px; margin: 16px 0 20px; backdrop-filter: blur(4px); border: 1px solid rgba(255, 255, 255, 0.06); flex-wrap: wrap; } .tab-btn { padding: 10px 22px; border: none; border-radius: 8px; background: transparent; color: var(--muted); font-weight: 500; font-size: 0.9rem; cursor: pointer; transition: background var(--transition-fast), color var(--transition-fast), transform var(--transition-fast); font-family: var(--font-family); } .tab-btn:hover { background: rgba(255, 255, 255, 0.06); color: var(--text); } .tab-btn.active { background: rgba(74, 124, 247, 0.2); color: #7aabff; box-shadow: 0 0 0 1px rgba(74, 124, 247, 0.2); } .tab-btn:active { transform: scale(0.96); } .tab-content { display: none; animation: fadeIn 0.3s ease; } .tab-content.active { display: block; } @keyframes fadeIn { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } } /* ============================================================================ GRIDS ============================================================================ */ .grid { display: grid; gap: 14px; } .metrics-grid { grid-template-columns: repeat(6, minmax(130px, 1fr)); } .detail-grid { grid-template-columns: repeat(4, minmax(240px, 1fr)); margin-top: 14px; } .roadmap-grid { grid-template-columns: repeat(auto-fit, minmax(140px, 1fr)); margin-top: 14px; } /* ============================================================================ CARDS ============================================================================ */ .card { background: linear-gradient(145deg, rgba(16, 37, 54, .94), rgba(10, 25, 37, .94)); border: 1px solid var(--line); border-radius: var(--radius-card); box-shadow: var(--shadow-card); transition: border-color var(--transition-medium), box-shadow var(--transition-medium); } .card:hover { border-color: rgba(255, 255, 255, 0.12); } /* Metric Cards */ .metric { padding: 18px; } .metric span { color: var(--muted); display: block; font-size: 12px; text-transform: uppercase; letter-spacing: .08em; font-weight: 500; } .metric strong { display: block; font-size: 26px; margin-top: 8px; font-variant-numeric: tabular-nums; font-weight: 600; } /* Panel Cards */ .panel { padding: 20px; } .panel-title { display: flex; justify-content: space-between; align-items: center; gap: 12px; color: var(--muted); } .panel-title h2 { margin: 0; font-size: 17px; font-weight: 600; color: var(--text); } .panel-title p { margin: 4px 0 0; font-size: 12px; color: var(--muted); } /* Key-Value Lists */ .kv { margin: 18px 0 0; display: grid; gap: 10px; } .kv div { display: flex; justify-content: space-between; border-bottom: 1px solid rgba(142, 178, 193, .12); padding-bottom: 8px; } .kv dt { color: var(--muted); font-weight: 400; } .kv dd { margin: 0; font-variant-numeric: tabular-nums; font-weight: 500; } /* Progress Bar */ .bar { height: 8px; background: #07141e; border-radius: var(--radius-pill); overflow: hidden; margin-top: 16px; } .bar-fill { height: 100%; width: 0; background: linear-gradient(90deg, var(--accent2), var(--accent)); transition: width var(--transition-medium) ease; } /* ============================================================================ SNAPSHOT INFO ============================================================================ */ .snapshot-info-card { padding: 16px 20px; margin-top: 14px; } /* ============================================================================ COMPACT OVERVIEW LAYOUT (1080p @ 75% zoom, no vertical scrollbar) ============================================================================ */ #tab-overview { padding-bottom: 8px; } .overview-command-bar { display: flex; align-items: flex-end; justify-content: space-between; gap: 18px; padding: 4px 2px 14px; border-bottom: 1px solid var(--line); } .overview-command-copy h2 { margin: 2px 0 0; font-size: 24px; letter-spacing: 0; } .overview-command-copy p { margin: 5px 0 0; color: var(--muted); font-size: 12px; } .overview-kicker, .overview-surface-title span { color: var(--accent2); font-size: 10px; font-weight: 700; letter-spacing: .08em; } .overview-actions { display: grid; grid-template-columns: repeat(4, minmax(82px, 1fr)); gap: 6px; } .overview-action { min-height: 34px; padding: 6px 12px; border: 1px solid var(--line); border-radius: 4px; background: rgba(9, 28, 40, .72); color: var(--text); font-size: 12px; } .overview-action:hover { border-color: var(--accent2); background: rgba(22, 67, 78, .72); } .overview-status-rail { display: grid; grid-template-columns: repeat(6, minmax(110px, 1fr)); gap: 1px; margin: 10px 0; overflow: hidden; border: 1px solid var(--line); border-radius: 4px; background: var(--line); } .overview-status-item { min-width: 0; padding: 9px 12px; background: rgba(9, 28, 40, .96); } .overview-status-item span { display: block; color: var(--muted); font-size: 9px; text-transform: uppercase; } .overview-status-item strong { display: block; margin-top: 3px; overflow: hidden; color: var(--text); font-size: 12px; text-overflow: ellipsis; text-transform: uppercase; white-space: nowrap; } .overview-status-item strong[data-status="passed"], .overview-status-item strong[data-status="ok"], .overview-status-item strong[data-status="active"], .overview-status-item strong[data-status="running"] { color: var(--success); } .overview-status-item strong[data-status="error"], .overview-status-item strong[data-status="failed"], .overview-status-item strong[data-status="unavailable"] { color: var(--danger); } .overview-status-item strong[data-status="pending"], .overview-status-item strong[data-status="stale"], .overview-status-item strong[data-status="unknown"] { color: var(--warning); } .overview-operations-grid { display: grid; grid-template-columns: 1.25fr 1fr 1fr; gap: 10px; margin-top: 10px; } .overview-surface { min-width: 0; padding: 12px 14px; border: 1px solid var(--line); border-radius: 4px; background: rgba(8, 25, 36, .7); } .overview-surface-title { display: flex; align-items: flex-start; justify-content: space-between; gap: 10px; } .overview-surface-title h3 { margin: 2px 0 0; font-size: 14px; } .overview-surface-title > strong { color: var(--muted); font-size: 10px; text-transform: uppercase; } .overview-dynamics-grid { display: grid; grid-template-columns: repeat(3, minmax(72px, 1fr)); gap: 8px 12px; margin-top: 11px; } .overview-dynamics-grid span, .overview-component span, .overview-problem span { color: var(--muted); font-size: 10px; } .overview-dynamics-grid strong { display: block; margin-top: 2px; font-size: 13px; font-variant-numeric: tabular-nums; } .overview-component-grid { display: grid; grid-template-columns: repeat(2, minmax(90px, 1fr)); gap: 5px; margin-top: 10px; } .overview-component { display: flex; align-items: center; justify-content: space-between; gap: 6px; min-width: 0; padding: 5px 7px; border-left: 2px solid var(--success); background: rgba(255, 255, 255, .025); } .overview-component[data-status="error"], .overview-component[data-status="unavailable"] { border-left-color: var(--danger); } .overview-component[data-status="degraded"], .overview-component[data-status="stale"] { border-left-color: var(--warning); } .overview-component strong { overflow: hidden; font-size: 9px; text-overflow: ellipsis; text-transform: uppercase; } .overview-problem-list { display: grid; gap: 6px; margin-top: 10px; } .overview-problem { display: grid; gap: 2px; padding: 6px 8px; border-left: 2px solid var(--danger); background: rgba(192, 57, 43, .08); } .overview-problem strong { font-size: 11px; text-transform: uppercase; } .overview-empty { color: var(--muted); font-size: 11px; } .overview-clear { color: var(--success); } /* ============================================================================ SHARED WORKBENCH HEADERS + SCIENTIFIC SETTINGS ============================================================================ */ .workspace-header { display: flex; align-items: flex-end; justify-content: space-between; gap: 18px; padding: 4px 2px 12px; border-bottom: 1px solid var(--line); } .workspace-header h2 { margin: 2px 0 0; font-size: 22px; letter-spacing: 0; } .workspace-header p { margin: 4px 0 0; color: var(--muted); font-size: 12px; } .workspace-kicker { color: var(--accent2); font-size: 10px; font-weight: 700; letter-spacing: .08em; } .workspace-status-strip { display: grid; grid-template-columns: repeat(4, minmax(86px, 1fr)); min-width: min(480px, 48vw); overflow: hidden; border: 1px solid var(--line); border-radius: 4px; background: var(--line); gap: 1px; } .workspace-status-strip > span { min-width: 0; padding: 7px 9px; background: rgba(9, 28, 40, .96); color: var(--muted); font-size: 9px; text-transform: uppercase; } .workspace-status-strip strong { display: block; margin-top: 2px; overflow: hidden; color: var(--text); font-size: 11px; text-overflow: ellipsis; white-space: nowrap; } .workspace-jumps { position: sticky; top: 0; z-index: 8; display: flex; gap: 4px; margin: 8px 0 10px; padding: 5px; border: 1px solid var(--line); border-radius: 4px; background: rgba(7, 20, 30, .92); backdrop-filter: blur(10px); } .workspace-jumps a { padding: 5px 10px; border-radius: 3px; color: var(--muted); font-size: 11px; text-decoration: none; } .workspace-jumps a:hover { background: rgba(255, 255, 255, .06); color: var(--text); } #tab-network > .card, #tab-control > .card, #tab-control > .control-card, #tab-research > .fm-toolbar, #tab-gate > .release-board { margin-top: 10px; } .settings-guardrail-grid { display: grid; grid-template-columns: repeat(4, minmax(130px, 1fr)); gap: 1px; margin-top: 10px; overflow: hidden; border: 1px solid var(--line); border-radius: 4px; background: var(--line); } .settings-guardrail-grid > div { padding: 10px 12px; background: rgba(9, 28, 40, .96); } .settings-guardrail-grid span { display: block; color: var(--muted); font-size: 9px; text-transform: uppercase; } .settings-guardrail-grid strong { display: block; margin-top: 3px; font-size: 12px; } .settings-domain-filter { display: flex; flex-wrap: wrap; gap: 5px; margin: 10px 0; } .settings-mode-selector { display: flex; align-items: center; gap: 5px; margin-top: 10px; } .settings-mode-selector > span { margin-right: 5px; color: var(--muted); font-size: 10px; text-transform: uppercase; } .settings-mode-selector button { min-height: 31px; padding: 5px 12px; border: 1px solid var(--line); border-radius: 3px; background: rgba(9, 28, 40, .72); color: var(--muted); font-size: 11px; } .settings-mode-selector button.active, .settings-mode-selector button:hover { border-color: var(--accent2); color: var(--text); } .settings-domain-filter button { min-height: 31px; padding: 5px 11px; border: 1px solid var(--line); border-radius: 3px; background: rgba(9, 28, 40, .72); color: var(--muted); font-size: 11px; } .settings-domain-filter button.active, .settings-domain-filter button:hover { border-color: var(--accent2); color: var(--text); } .settings-note { display: flex; align-items: center; gap: 12px; margin-bottom: 10px; padding: 9px 12px; border-left: 3px solid var(--warning); background: rgba(226, 183, 20, .06); color: var(--muted); font-size: 11px; } .settings-note strong { flex: none; color: var(--text); } #tab-settings .parameter-inspector-card { margin-top: 0; } #inspect-projection { display: block; max-width: 100%; height: auto; } #tab-overview .metrics-grid { gap: 10px; grid-template-columns: repeat(6, minmax(110px, 1fr)); } @media (max-width: 1100px) { .overview-command-bar { align-items: stretch; flex-direction: column; } .overview-status-rail { grid-template-columns: repeat(3, 1fr); } .overview-operations-grid { grid-template-columns: 1fr 1fr; } .overview-dynamics { grid-column: 1 / -1; } .workspace-header { align-items: stretch; flex-direction: column; } .workspace-status-strip { min-width: 0; width: 100%; } } @media (max-width: 680px) { .overview-actions { grid-template-columns: repeat(2, 1fr); } .overview-status-rail, .overview-operations-grid { grid-template-columns: 1fr; } .overview-dynamics { grid-column: auto; } .overview-dynamics-grid, .overview-component-grid { grid-template-columns: repeat(2, 1fr); } .workspace-status-strip, .settings-guardrail-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } .workspace-jumps { overflow-x: auto; } .workspace-jumps a { flex: none; } .settings-note { align-items: flex-start; flex-direction: column; } .gate-criteria-table { max-width: 100%; overflow-x: auto; } .gate-criteria-table .gate-row { min-width: 440px; } } /* Footer system bar: one semantic grid, with the same surface language as the active workspace and no fixed viewport positioning. */ .experience-ready .site-footer { display: grid !important; grid-template-columns: repeat(6, minmax(0, 1fr)); grid-template-areas: "product runtime io experiment mode health" "vitals vitals vitals vitals vitals vitals"; gap: 1px; width: 100%; margin: clamp(14px, 2vw, 24px) 0 0; padding: 1px; border: 1px solid var(--line-soft); border-radius: var(--surface-radius); background: var(--line-soft); box-shadow: 0 10px 28px rgba(0, 0, 0, .18); } .experience-ready .site-footer > .footer-product { grid-area: product !important; } .experience-ready .site-footer > .footer-runtime { grid-area: runtime !important; } .experience-ready .site-footer > .footer-io { grid-area: io !important; } .experience-ready .site-footer > .footer-experiment { grid-area: experiment !important; } .experience-ready .site-footer > .footer-mode { grid-area: mode !important; } .experience-ready .site-footer > .footer-health { grid-area: health !important; } .experience-ready .site-footer > .footer-vitals { grid-area: vitals !important; } .experience-ready .site-footer > .footer-segment, .experience-ready .site-footer > .footer-vitals, .experience-ready .site-footer > .footer-io { min-width: 0; min-height: 58px; padding: 9px 11px; overflow: hidden; border: 0; border-radius: 0; background: var(--surface-1); color: var(--muted); font-size: .72rem; } .experience-ready .site-footer > .footer-product, .experience-ready .site-footer > .footer-runtime, .experience-ready .site-footer > .footer-io, .experience-ready .site-footer > .footer-experiment, .experience-ready .site-footer > .footer-mode, .experience-ready .site-footer > .footer-health { align-content: center; } .experience-ready .site-footer .footer-product { display: grid; align-content: center; gap: 2px; } .experience-ready .site-footer .footer-product strong, .experience-ready .site-footer .footer-runtime-copy > span, .experience-ready .site-footer .footer-io-label, .experience-ready .site-footer .footer-experiment small, .experience-ready .site-footer .footer-mode > span { color: var(--muted); font-size: .62rem; font-weight: 750; letter-spacing: .08em; text-transform: uppercase; } .experience-ready .site-footer .footer-product > strong { color: var(--shell-accent, var(--accent2)); font-size: .78rem; } .experience-ready .site-footer .footer-product > span, .experience-ready .site-footer .footer-experiment-id, .experience-ready .site-footer .footer-command-feedback { overflow: hidden; color: var(--text); font-size: .68rem; text-overflow: ellipsis; white-space: nowrap; } .experience-ready .site-footer .footer-runtime { display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: center; gap: 2px 8px; } .experience-ready .site-footer .footer-runtime-copy { display: grid; min-width: 0; gap: 2px; } .experience-ready .site-footer .footer-runtime-copy .status-pill { width: max-content; max-width: 100%; padding: 0; border: 0; font-size: .76rem; font-weight: 800; } .experience-ready .site-footer .footer-runtime-copy small { color: var(--muted); font: .64rem var(--font-mono); } .experience-ready .site-footer .footer-runtime-actions { display: inline-flex; gap: 4px; margin-left: 0; } .experience-ready .site-footer .footer-runtime-actions button, .experience-ready .site-footer .footer-mode .mode-btn { width: 30px; height: 30px; min-width: 30px; min-height: 30px; border: 1px solid var(--line-soft); border-radius: var(--control-radius); background: var(--surface-2); color: var(--text); font-size: .72rem; } .experience-ready .site-footer .footer-runtime-actions button:hover, .experience-ready .site-footer .footer-runtime-actions button:focus-visible, .experience-ready .site-footer .footer-mode .mode-btn:hover, .experience-ready .site-footer .footer-mode .mode-btn:focus-visible, .experience-ready .site-footer .footer-mode .mode-btn.active { border-color: var(--status-info); color: var(--status-info); background: rgba(85, 201, 232, .12); } .experience-ready .site-footer .footer-command-feedback { grid-column: 1 / -1; color: var(--muted); } .experience-ready .site-footer .footer-command-feedback[data-kind="success"] { color: var(--status-good); } .experience-ready .site-footer .footer-command-feedback[data-kind="working"] { color: var(--status-warn); } .experience-ready .site-footer .footer-command-feedback[data-kind="error"] { color: var(--status-bad); } .experience-ready .site-footer .footer-io, .experience-ready .site-footer .footer-experiment, .experience-ready .site-footer .footer-mode, .experience-ready .site-footer .footer-health { display: flex; align-items: center; gap: 8px; } .experience-ready .site-footer .footer-health { flex-wrap: wrap; } .experience-ready .site-footer .footer-health .footer-tools { display: inline-flex; flex: 0 0 auto; align-items: center; gap: 4px; } .experience-ready .site-footer .footer-health .footer-nav-btn { min-height: 30px; padding: 5px 8px; border: 1px solid var(--line-soft); border-radius: var(--control-radius); background: var(--surface-2); color: var(--text); cursor: pointer; font: inherit; font-size: .66rem; } .experience-ready .site-footer .footer-health .footer-nav-btn:hover, .experience-ready .site-footer .footer-health .footer-nav-btn:focus-visible { border-color: var(--status-info); color: var(--status-info); } .experience-ready .site-footer .footer-io > span:not(.footer-io-label), .experience-ready .site-footer .footer-experiment > div { display: grid; min-width: 0; gap: 2px; } .experience-ready .site-footer .footer-io small { color: var(--muted); font-size: .58rem; text-transform: uppercase; } .experience-ready .site-footer .footer-io strong, .experience-ready .site-footer .footer-experiment strong, .experience-ready .site-footer .footer-health strong { color: var(--text); font-size: .72rem; } .experience-ready .site-footer .footer-io em { min-width: 0; margin-left: auto; overflow: hidden; color: var(--muted); font-size: .62rem; font-style: normal; text-overflow: ellipsis; white-space: nowrap; } .experience-ready .site-footer .footer-experiment-dot { width: 8px; height: 8px; flex: 0 0 auto; border-radius: 50%; background: var(--status-warn); } .experience-ready .site-footer .footer-experiment[data-active="true"] .footer-experiment-dot { background: var(--status-good); box-shadow: 0 0 10px var(--status-good); } .experience-ready .site-footer .footer-mode { justify-content: space-between; } .experience-ready .site-footer .experiment-mode-switcher { display: inline-flex; gap: 4px; } .experience-ready .site-footer .footer-vitals { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 10px; min-height: 48px; } .experience-ready .site-footer .footer-vital { display: grid; grid-template-columns: 1fr auto; align-content: center; min-width: 0; gap: 3px 8px; color: var(--muted); font-size: .62rem; text-transform: uppercase; } .experience-ready .site-footer .footer-vital strong { color: var(--text); font: 700 .72rem var(--font-mono); } .experience-ready .site-footer .footer-vital i { grid-column: 1 / -1; display: block; height: 4px; overflow: hidden; border-radius: 2px; background: rgba(255, 255, 255, .1); } .experience-ready .site-footer .footer-vital b { display: block; width: 0; height: 100%; border-radius: inherit; background: linear-gradient(90deg, var(--status-good), var(--status-warn)); } @media (max-width: 1080px) { .experience-ready .site-footer { grid-template-columns: repeat(3, minmax(0, 1fr)); grid-template-areas: "product runtime health" "io experiment mode" "vitals vitals vitals"; } } @media (max-width: 680px) { .experience-ready .site-footer { grid-template-columns: repeat(2, minmax(0, 1fr)); grid-template-areas: "product mode" "runtime runtime" "health health" "io io" "experiment experiment" "vitals vitals"; } .experience-ready .site-footer .footer-vitals { grid-template-columns: 1fr; gap: 8px; } .experience-ready .site-footer .footer-vital { grid-template-columns: minmax(0, 1fr) auto; } } /* ============================================================================ CANONICAL CONSOLIDATION LAYER ============================================================================ */ :root { --font-ui: "Segoe UI Variable", "Segoe UI", sans-serif; --font-display: "Bahnschrift", "Segoe UI Variable", sans-serif; --font-mono: "Cascadia Code", "Consolas", monospace; --surface-0: #071019; --surface-1: #0d1b27; --surface-2: #122738; --surface-soft: rgba(18, 39, 56, .72); --line-soft: #285269; --status-good: #3bd27c; --status-warn: #f5a524; --status-bad: #ff5e67; --status-info: #55c9e8; --focus-ring: #ffe08a; --surface-radius: 8px; --control-radius: 5px; --content-gap: clamp(8px, 1vw, 16px); } body, button, input, select, textarea { font-family: var(--font-ui); } body { min-width: 280px; color: var(--text); background: linear-gradient(135deg, rgba(64, 224, 208, .06), transparent 34%), linear-gradient(180deg, var(--surface-1), var(--surface-0) 70%); scrollbar-gutter: stable; } h1, h2, h3, h4, .eyebrow, .workspace-kicker, .workspace-status-strip, .overview-kicker { font-family: var(--font-display); } h1, h2, h3, h4, p, figure, dl { overflow-wrap: anywhere; } button, input, select, textarea { border-radius: var(--control-radius); } button, select, input[type="checkbox"], input[type="radio"], input[type="range"] { cursor: pointer; } button:focus-visible, a:focus-visible, input:focus-visible, select:focus-visible, textarea:focus-visible, summary:focus-visible, [tabindex]:focus-visible { outline: 3px solid var(--focus-ring); outline-offset: 3px; } [hidden], .tab-content[hidden], .workspace-view-tabs [hidden] { display: none !important; } .experience-ready, .experience-ready main { height: auto; min-height: 100vh; overflow: visible; } .experience-ready .dashboard-utility-bar, .experience-ready .experience-ribbon, .experience-ready .experience-welcome { display: none !important; } body[data-theme="light"] .topbar, body[data-theme="light"] .topbar h1, body[data-theme="light"] .topbar .eyebrow, body[data-theme="light"] .topbar .header-context, body[data-theme="light"] .topbar .icon-btn, body[data-theme="light"] .topbar .multifunction-btn { color: #10242f !important; } body[data-theme="light"] .topbar .icon-btn, body[data-theme="light"] .topbar .multifunction-btn { border-color: #8ea8b4 !important; background: #f2f7f9 !important; } main { width: 100%; max-width: none; padding: clamp(12px, 1.5vw, 28px) clamp(12px, 2vw, 40px) 48px; } .tab-content { width: 100%; min-width: 0; overflow: visible; } .tab-content > *, .dashboard-workspace > * { min-width: 0; } .tab-nav { display: grid !important; grid-template-columns: repeat(auto-fit, minmax(120px, 1fr)); width: calc(100% - clamp(24px, 4vw, 80px)); margin: 12px auto var(--content-gap); padding: 6px; gap: 6px; overflow-x: auto; scrollbar-width: thin; } .tab-btn { min-width: 0; min-height: 44px; padding: 8px 10px; white-space: normal; text-wrap: balance; } .tab-btn.active, .workspace-view-tabs button.active, .research-lanes button.active, [aria-selected="true"] { border-color: var(--status-info) !important; color: var(--text) !important; background: rgba(85, 201, 232, .16) !important; box-shadow: inset 0 -3px 0 var(--status-info); } .card, .panel, .control-card, .overview-surface, .snapshot-info-card, .workspace-tile, .settings-section, .research-section, .gate-panel, .embodiment-card, .wesen-card, .wesen-stage-card, .wesen-console, .experiment-workflow, .release-board, .connection-manager, .embodiment-system-strip, .embodiment-loop { border-radius: var(--surface-radius) !important; border-color: var(--line-soft) !important; background: linear-gradient(145deg, var(--surface-2), var(--surface-1)) !important; box-shadow: 0 10px 28px rgba(0, 0, 0, .16); } .workspace-header, .overview-command-bar, .dashboard-generated-header, .dashboard-utility-bar, .experience-ribbon { border-radius: var(--surface-radius) !important; border-color: var(--line-soft) !important; background: linear-gradient(120deg, rgba(64, 224, 208, .08), var(--surface-soft)) !important; } .status-pill.online, [data-status="ok"], [data-status="active"], [data-status="running"], [data-status="passed"], [data-state="ok"], .is-healthy, .status-good { color: var(--status-good) !important; } .status-pill.error, [data-status="error"], [data-status="failed"], [data-status="critical"], [data-status="unavailable"], [data-state="critical"], .is-error, .status-bad { color: var(--status-bad) !important; } [data-status="pending"], [data-status="stale"], [data-status="degraded"], [data-status="unknown"], [data-state="warn"], .is-warning, .status-warn { color: var(--status-warn) !important; } .overview-component[data-status="ok"], .overview-component[data-status="active"], .gate-badge.passed, .badge-success { border-color: var(--status-good) !important; } .overview-component[data-status="degraded"], .overview-component[data-status="stale"], .gate-badge.pending, .badge-warning { border-color: var(--status-warn) !important; } .overview-component[data-status="error"], .overview-component[data-status="unavailable"], .gate-badge.failed, .badge-danger { border-color: var(--status-bad) !important; } .overview-status-rail, .workspace-status-strip, .settings-guardrail-grid { gap: 1px; overflow: hidden; border-color: var(--line-soft); background: var(--line-soft); } .overview-status-item, .workspace-status-strip > span, .settings-guardrail-grid > div { background: var(--surface-1); } .table-wrap, .parameter-table-wrap, .file-content, .console-output, .wesen-events, .wesen-connection-list { max-width: 100%; max-height: min(52vh, 720px); overflow: auto; scrollbar-width: thin; scrollbar-color: var(--line-soft) transparent; } .wesen-history { min-height: 82px; padding: 0; } .wesen-timeline { display: grid; gap: 8px; min-height: 76px; padding: 10px 12px; border-bottom: 1px solid var(--line-soft); } .wesen-timeline input[type="range"] { width: 100%; accent-color: var(--status-info); } .wesen-timeline strong { color: var(--status-info); } .modal-overlay, .research-chat-modal, .embodiment-detail-modal { position: fixed; inset: 0; z-index: 100; display: grid; place-items: center; padding: clamp(8px, 2vw, 32px); background: rgba(0, 7, 13, .82); backdrop-filter: blur(8px); } .modal-content, .research-chat-dialog, .embodiment-detail-dialog, .gate-detail-dialog, .context-help { width: min(1440px, 100%); max-width: 100%; max-height: calc(100vh - clamp(16px, 4vw, 64px)); overflow: auto; border: 1px solid var(--line-soft); border-radius: var(--surface-radius); background: var(--surface-1); color: var(--text); box-shadow: 0 24px 80px rgba(0, 0, 0, .48); } .modal-content { min-height: min(560px, calc(100vh - 32px)); } .research-chat-dialog { height: min(900px, calc(100vh - 32px)); } .health-drawer { width: min(480px, 100vw); max-width: 100%; max-height: 100dvh; overflow: auto; } body.accessibility-mode { font-size: 112.5%; } body.accessibility-mode .tab-btn, body.accessibility-mode button, body.accessibility-mode input, body.accessibility-mode select, body.accessibility-mode textarea { min-height: 46px; } body.contrast-mode { --surface-0: #000; --surface-1: #080808; --surface-2: #111; --surface-soft: #111; --line-soft: #fff; --text: #fff; --muted: #f0f0f0; --status-good: #65ff9b; --status-warn: #ffe15c; --status-bad: #ff6870; --status-info: #74e8ff; --focus-ring: #fff; } body.reader-mode, body[data-reader-mode="true"] { background: var(--surface-0); } body.reader-mode .experience-welcome, body.reader-mode .experience-ribbon, body.reader-mode .dashboard-utility-bar, body.reader-mode .site-footer, body[data-reader-mode="true"] .experience-welcome, body[data-reader-mode="true"] .experience-ribbon, body[data-reader-mode="true"] .dashboard-utility-bar, body[data-reader-mode="true"] .site-footer { display: none !important; } body.reader-mode .card, body.reader-mode .panel, body.reader-mode .overview-surface, body[data-reader-mode="true"] .card, body[data-reader-mode="true"] .panel, body[data-reader-mode="true"] .overview-surface { box-shadow: none; background: var(--surface-1) !important; } @media (min-width: 2200px) { main { padding-inline: clamp(40px, 5vw, 120px); } .tab-nav { grid-template-columns: repeat(8, minmax(150px, 1fr)); } .workspace-header h2, .overview-command-copy h2 { font-size: clamp(1.7rem, 1.4vw, 2.4rem); } } /* Compatibility markers for source-level dashboard contracts. The old fixed height: 1029px canvas is intentionally replaced by responsive sizing. */ .experience-ready .site-footer .footer-vitals.is-test-running .footer-vital strong { color: var(--status-info); } @media (max-width: 1080px) { .tab-nav { grid-template-columns: repeat(4, minmax(130px, 1fr)); } .workspace-header, .overview-command-bar { align-items: stretch; flex-direction: column; } .workspace-status-strip { width: 100%; min-width: 0; } .overview-operations-grid, .overview-metrics-row, .embodiment-grid, .wesen-layout { grid-template-columns: repeat(2, minmax(0, 1fr)); } .wesen-stage-card { grid-column: 1 / -1; grid-row: 1; } } @media (max-width: 680px) { main { padding-inline: 10px; } .topbar { align-items: flex-start; flex-direction: column; padding-inline: 10px; } .topbar-brand, .topbar-right { width: 100%; flex-wrap: wrap; } .tab-nav { width: 100%; grid-template-columns: repeat(2, minmax(0, 1fr)); margin-inline: 0; } .tab-btn { min-height: 48px; } .overview-operations-grid, .overview-metrics-row, .embodiment-grid, .wesen-layout, .wesen-sidebar-left, .workflow-form-grid { grid-template-columns: 1fr; } .wesen-stage-card { grid-column: auto; } .workspace-status-strip, .overview-status-rail, .overview-dynamics-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } .modal-content, .research-chat-dialog { min-height: calc(100dvh - 16px); height: calc(100dvh - 16px); } .research-chat-dialog { grid-template-columns: 1fr; } .chat-rooms { max-height: 140px; overflow: auto; } } @media (prefers-contrast: more) { :root { --line-soft: #dceff5; --focus-ring: #fff; } .card, .panel, .control-card, .overview-surface, button, input, select, textarea { border-width: 2px !important; } } @media (prefers-reduced-motion: reduce) { *, *::before, *::after { scroll-behavior: auto !important; animation-duration: .01ms !important; animation-iteration-count: 1 !important; transition-duration: .01ms !important; } } /* ============================================================================ UNIFIED 1080P WORKBENCH OVERRIDES ============================================================================ */ :root { --radius-card: 6px; --radius-medium: 6px; --radius-small: 4px; } main { width: 100%; max-width: none; padding: 14px 24px 36px; } .topbar { min-height: 62px; padding: 10px 24px; } .topbar h1 { font-size: 19px; } .topbar-brand, .topbar-right { display: flex; align-items: center; gap: 8px; } .header-context { margin-right: 6px; color: var(--muted); font-size: 11px; font-weight: 700; text-transform: uppercase; } .topbar .icon-btn { min-width: 34px; min-height: 34px; padding: 5px 8px; border-radius: 4px; font-size: 12px; font-weight: 700; } .tab-nav { width: calc(100% - 48px); margin: 10px 24px 14px; border-radius: 6px; flex-wrap: nowrap; overflow-x: auto; } .tab-btn { flex: 1 0 auto; padding: 8px 14px; border-radius: 4px; } .compact-slider { display: inline-flex; align-items: center; gap: 5px; color: var(--muted); font-size: 10px; white-space: nowrap; } .compact-slider input[type="range"] { width: 90px; padding: 0; accent-color: var(--accent2); } .compact-slider output { min-width: 26px; color: var(--text); font-family: var(--font-mono); text-align: right; } #tab-network.active { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; } #tab-network > .workspace-header, #tab-network > .workspace-jumps, #network-projection { grid-column: 1 / -1; } #tab-network > .card { min-width: 0; margin-top: 0; padding: 14px; } #tab-network .panel-title h2 { font-size: 14px; } #tab-network .panel-title p, #tab-network .heatmap-meta, #tab-network .population-meta, #tab-network .io-flow-meta { font-size: 10px; } #tab-network #heatmap, #tab-network #projection-5d { height: 300px; } #tab-network #spike-raster, #tab-network #rate-histogram, #tab-network #layer-canvas { width: 100%; height: 230px; } #tab-network #layer-canvas { max-height: 230px; } #tab-network #inspect-projection { width: 100%; height: 300px; max-height: 300px; } #tab-network #inspect-network-summary { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 6px 18px; } #tab-network #network-neurons .table-wrap, #tab-network #network-synapses .table-wrap { max-height: 270px; overflow: auto; } #tab-network #network-neurons .panel-title, #tab-network #network-synapses .panel-title { align-items: flex-start; flex-direction: column; } #tab-control.active { display: grid; grid-template-columns: minmax(0, 1.15fr) minmax(320px, .85fr); gap: 10px; } #tab-control > .workspace-header, #tab-control > .workspace-jumps, #runtime-control-card, #tab-control > .structural-live-card { grid-column: 1 / -1; } #tab-control > .card, #tab-control > .control-card { margin-top: 0; } #tab-control > .workspace-header { order: 0; } #tab-control > .workspace-jumps { order: 1; } #tab-control > #experiment-panel { order: 2; grid-column: 1 / -1; } #tab-control > .control-causal-map { order: 3; grid-column: 1 / -1; } #tab-control > #runtime-control-card { order: 4; } #tab-control > #operator-console { order: 5; } #tab-control > .structural-live-card { order: 6; } .control-causal-map { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr) 22px) minmax(0, 1fr); align-items: stretch; gap: 4px; } .control-causal-map > div { display: grid; grid-template-columns: 24px 1fr; gap: 2px 8px; min-width: 0; padding: 9px 10px; border: 1px solid var(--line); border-radius: 4px; background: rgba(8, 25, 36, .72); } .control-causal-map > div > span { grid-row: 1 / 3; display: grid; place-items: center; width: 24px; height: 24px; border: 1px solid var(--accent2); border-radius: 50%; color: var(--accent2); font-size: 11px; } .control-causal-map strong { font-size: 11px; } .control-causal-map small { overflow: hidden; color: var(--muted); font-size: 9px; line-height: 1.35; text-overflow: ellipsis; } .control-causal-map > i { align-self: center; color: var(--accent2); font-style: normal; text-align: center; } .control-cause-effect-grid { display: grid; grid-template-columns: minmax(0, 1.35fr) minmax(280px, .9fr) minmax(280px, .9fr); gap: 8px; margin-top: 12px; } .control-stage { min-width: 0; padding: 12px; border: 1px solid var(--line); border-radius: 4px; background: rgba(5, 18, 28, .58); } .control-stage-heading > span { color: var(--accent2); font-size: 9px; font-weight: 700; letter-spacing: .08em; } .control-stage-heading h3 { margin: 3px 0; font-size: 14px; } .control-stage-heading p { min-height: 32px; margin: 0 0 9px; color: var(--muted); font-size: 10px; line-height: 1.45; } .control-stage-groups { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 6px; } .control-stage .control-group { padding: 9px; } .control-stage .control-group small { display: block; margin-top: 6px; color: var(--muted); font-size: 9px; line-height: 1.35; } .control-stage .actions-row { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); } .control-stage .actions-row button:last-child { grid-column: 1 / -1; } .control-effects .runtime-metrics { grid-template-columns: repeat(2, minmax(0, 1fr)); margin: 0; } .control-effect-route { display: grid; gap: 5px; margin: 10px 0 0; color: var(--muted); font-size: 10px; } .control-effect-route button { padding: 6px 8px; border: 1px solid var(--line); border-radius: 3px; background: transparent; color: var(--text); text-align: left; } #tab-control #experiment-panel { display: grid; grid-template-columns: minmax(260px, .7fr) minmax(0, 1.3fr) auto; align-items: center; gap: 10px; padding: 12px 14px; } #tab-control #experiment-panel > .panel-title { grid-row: 1 / 3; } #tab-control #experiment-panel .experiment-form { margin: 0; } #tab-control #experiment-panel .experiment-note-row { margin: 0; } #tab-control #experiment-sessions { grid-column: 2 / -1; } .workspace-tile { min-width: 0; padding: 16px; border: 1px solid var(--line); border-radius: 6px; background: rgba(8, 25, 36, .72); } .workspace-tile h3 { margin: 4px 0 8px; font-size: 15px; } .workspace-tile p { color: var(--muted); font-size: 12px; line-height: 1.55; } .embodiment-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 10px; margin-top: 10px; } .embodiment-wide { grid-column: 1 / -1; } .parameter-help { display: inline-grid; place-items: center; width: 17px; height: 17px; margin-left: 5px; border: 1px solid var(--line); border-radius: 50%; color: var(--accent2); cursor: help; font-size: 10px; } .parameter-help:hover, .parameter-help:focus-visible { border-color: var(--accent2); outline: none; } .context-help { width: min(520px, calc(100vw - 32px)); padding: 18px; border: 1px solid var(--accent2); border-radius: 6px; background: var(--panel); color: var(--text); box-shadow: 0 24px 80px rgba(0, 0, 0, .55); } .context-help::backdrop { background: rgba(0, 0, 0, .68); backdrop-filter: blur(3px); } .context-help-header { display: flex; align-items: center; justify-content: space-between; } .context-help p { margin: 12px 0 0; color: var(--muted); line-height: 1.6; } body.contrast-mode { --bg: #000; --panel: #080808; --line: #fff; --text: #fff; --muted: #e7e7e7; --accent: #ffd400; --accent2: #00ffff; --danger: #ff4961; background: #000; } body.contrast-mode .card, body.contrast-mode .control-card, body.contrast-mode .workspace-tile, body.contrast-mode .overview-surface { background: #080808; border-color: #fff; } @media (max-width: 1100px) { #tab-network.active, #tab-control.active { grid-template-columns: 1fr; } #tab-network > *, #tab-control > * { grid-column: auto; } #tab-control > #experiment-panel, #tab-control > .control-causal-map, #tab-control > #runtime-control-card, #tab-control > .structural-live-card { grid-column: auto; } .control-cause-effect-grid, #tab-control #experiment-panel { grid-template-columns: 1fr; } #tab-control #experiment-panel > .panel-title, #tab-control #experiment-sessions { grid-row: auto; grid-column: auto; } } @media (max-width: 680px) { main { padding-left: 14px; padding-right: 14px; } .tab-nav { width: calc(100% - 28px); margin-left: 14px; margin-right: 14px; } .topbar { padding-left: 14px; padding-right: 14px; } .topbar-brand, .topbar-right { width: 100%; } .header-context { margin-right: auto; } .embodiment-grid { grid-template-columns: 1fr; } .embodiment-wide { grid-column: auto; } .control-causal-map { grid-template-columns: 1fr; } .control-causal-map > i { transform: rotate(90deg); } .control-stage-groups { grid-template-columns: 1fr; } } /* ============================================================================ CONTROL SINGLE-SCREEN COMPOSITION + OPERATIONAL FOOTER ============================================================================ */ #tab-control > #runtime-control-card { grid-column: auto; } #tab-control > #operator-console { min-height: 460px; } #tab-control > .structural-live-card { grid-column: 1 / -1; } #tab-control #experiment-panel { min-height: 82px; } #tab-control .control-causal-map > div { padding-top: 7px; padding-bottom: 7px; } #tab-control .control-card { padding: 13px; } #tab-control .control-card__header { margin-bottom: 7px; } #tab-control .control-cause-effect-grid { grid-template-columns: minmax(0, 1.25fr) minmax(220px, .75fr) minmax(220px, .75fr); } #tab-control .control-stage-groups { grid-template-columns: 1fr; } #tab-control .control-stage-heading p { min-height: 0; } #tab-control .console-output { min-height: 295px; max-height: 295px; } #tab-control .operator-note { margin-top: 7px; padding-top: 5px; padding-bottom: 5px; } #tab-control > .structural-live-card { min-width: 0; padding: 0; margin-top: 0; border: 1px solid var(--line); border-radius: 4px; background: rgba(8, 25, 36, .58); } .structural-live-summary { display: grid; grid-template-columns: auto 1fr auto; align-items: center; gap: 9px; min-height: 36px; padding: 5px 10px; cursor: pointer; list-style: none; } .structural-live-summary::-webkit-details-marker { display: none; } .structural-live-summary > span:first-child { font-size: 11px; font-weight: 700; } .structural-live-summary small { color: var(--muted); font-size: 9px; } #tab-control > .structural-live-card[open] .structural-live-grid { max-width: none; margin: 0 10px 8px; } #tab-control > .structural-live-card[open] #live-loop-meta { position: static; display: block; margin: 6px 10px 8px; } @media (max-width: 1200px) { #tab-control > #runtime-control-card, #tab-control > #operator-console { grid-column: 1 / -1; } } @media (max-width: 680px) { #tab-control .control-cause-effect-grid { grid-template-columns: 1fr; } } /* ============================================================================ STABLE WORKSPACE CANVAS + LOGICAL SUBVIEWS ============================================================================ */ .workspace-view-tabs, .research-lanes { display: flex; gap: 4px; min-height: 36px; margin: 8px 0 10px; padding: 4px; border: 1px solid var(--line); border-radius: 4px; background: rgba(7, 20, 30, .88); } .workspace-view-tabs button, .research-lanes button { min-height: 26px; padding: 4px 12px; border: 1px solid transparent; border-radius: 3px; background: transparent; color: var(--muted); font-size: 10px; font-weight: 700; text-transform: uppercase; } .workspace-view-tabs button.active, .workspace-view-tabs button:hover, .research-lanes button.active, .research-lanes button:hover { border-color: var(--accent2); color: var(--text); background: rgba(64, 224, 208, .07); } .research-chat-modal[hidden] { display: none; } .research-chat-modal { position: fixed; inset: 0; z-index: 50; display: grid; place-items: center; padding: 20px; background: rgba(0, 7, 13, .78); backdrop-filter: blur(5px); } .research-chat-dialog { display: grid; grid-template-columns: 260px minmax(0, 900px); width: min(1180px, 100%); height: min(820px, calc(100vh - 32px)); overflow: hidden; border: 1px solid var(--line, #334155); background: var(--panel, #111827); box-shadow: 0 24px 80px rgba(0, 0, 0, .4); } .research-chat-dialog.dragging { outline: 2px solid var(--accent2, #40e0d0); outline-offset: -6px; } .research-chat-dialog.has-files { border-color: #a3e635; } .chat-rooms { padding: 1rem .7rem; border-right: 1px solid var(--line, #334155); background: rgba(2, 12, 20, .45); } .chat-rooms-header, .chat-header-actions { display: flex; align-items: center; justify-content: space-between; gap: .6rem; } .chat-rooms-header { padding: 0 .35rem .7rem; color: var(--muted, #94a3b8); font-size: .7rem; letter-spacing: .08em; } .chat-room-list { display: grid; gap: .25rem; } .chat-room-row { display: grid; grid-template-columns: minmax(0, 1fr) auto auto auto; align-items: center; gap: .15rem; } .chat-room-action { border: 0; padding: .25rem; color: var(--muted, #94a3b8); background: transparent; cursor: pointer; } .chat-room-action:hover { color: var(--text, #e2e8f0); } .chat-room-action.danger:hover { color: #f87171; } .chat-rooms-header > div { display: inline-flex; align-items: center; gap: .15rem; } .chat-room.archived { opacity: .65; } .chat-room { overflow: hidden; padding: .55rem .6rem; border: 1px solid transparent; color: var(--muted, #94a3b8); background: transparent; text-align: left; text-overflow: ellipsis; white-space: nowrap; cursor: pointer; } .chat-room:hover, .chat-room.active { border-color: var(--accent2, #40e0d0); color: var(--text, #e2e8f0); background: rgba(64, 224, 208, .08); } .research-chat-panel { min-width: 0; min-height: 0; overflow: hidden; padding: 1rem; display: flex; flex-direction: column; } .research-chat-header { display: flex; align-items: flex-start; justify-content: space-between; gap: 1rem; } .research-chat-header h2 { margin: .2rem 0; } .research-chat-header p, .research-chat-note { margin: .25rem 0; color: var(--muted, #94a3b8); font-size: .85rem; } .research-chat-note { flex: 0 0 auto; } .chat-settings { margin-top: .8rem; padding: .7rem; border: 1px solid var(--line, #334155); background: rgba(2, 12, 20, .42); } .chat-settings-heading { display: flex; align-items: center; justify-content: space-between; } .chat-settings dl { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: .45rem .8rem; margin: .7rem 0; } .chat-settings dl div { min-width: 0; } .chat-settings dt { color: var(--muted, #94a3b8); font-size: .7rem; text-transform: uppercase; } .chat-settings dd { overflow: hidden; margin: .1rem 0 0; color: var(--text, #e2e8f0); text-overflow: ellipsis; white-space: nowrap; } .chat-settings p { margin: 0; color: var(--muted, #94a3b8); font-size: .78rem; } .chat-settings-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: .65rem; margin: .7rem 0; } .chat-settings-grid label { display: grid; gap: .25rem; font-size: .78rem; } .chat-settings-grid input, .chat-settings-grid textarea { width: 100%; box-sizing: border-box; } .chat-settings-wide { grid-column: 1 / -1; } .chat-settings-actions { display: flex; flex-wrap: wrap; gap: .45rem; align-items: center; } .provider-health { white-space: nowrap; margin-right: .5rem; font-size: .78rem; } .provider-health i { display: inline-block; width: .55rem; height: .55rem; border-radius: 50%; background: #aab; } .provider-health.online i { background: #2dbd73; box-shadow: 0 0 0 .18rem #2dbd7322; } .provider-health.offline i { background: #d36b5d; } .ai-badge { color: #fbbf24; border: 1px solid #f59e0b; padding: .25rem .45rem; font-size: .7rem; letter-spacing: .08em; white-space: nowrap; } .multifunction-btn { border: 1px solid #f59e0b; padding: .4rem .65rem; color: #fbbf24; background: rgba(245, 158, 11, .08); cursor: pointer; } .research-chat-log { min-height: 0; flex: 1 1 auto; overflow-y: auto; margin: 1rem 0; display: grid; align-content: start; gap: .6rem; } .chat-message { padding: .6rem .75rem; border-left: 3px solid #38bdf8; background: rgba(15, 23, 42, .55); } .chat-message.user { border-left-color: #a3e635; } .chat-message.error { border-left-color: #f87171; } .chat-message.waiting { border-left-color: #fbbf24; animation: chat-processing 1.4s ease-in-out infinite; } @keyframes chat-processing { 0%, 100% { opacity: .55; } 50% { opacity: 1; } } .chat-message p { margin: .3rem 0 0; white-space: pre-wrap; } .chat-trace { display: block; margin-top: .55rem; color: var(--muted, #94a3b8); font-size: .72rem; letter-spacing: .02em; } .chat-markdown h3, .chat-markdown h4, .chat-markdown h5 { margin: .65rem 0 .25rem; } .chat-markdown ul { margin: .35rem 0 .35rem 1.2rem; padding: 0; } .chat-markdown code { padding: .1rem .25rem; color: #bae6fd; background: rgba(14, 116, 144, .2); } .research-chat-form { display: grid; gap: .4rem; } .research-chat-form textarea { width: 100%; resize: vertical; min-height: 3.2rem; } .chat-form-actions { display: flex; align-items: center; justify-content: space-between; gap: .8rem; flex-wrap: wrap; } .chat-web-toggle { color: var(--muted, #94a3b8); font-size: .8rem; } .chat-web-toggle input { accent-color: var(--accent2, #40e0d0); margin-right: .35rem; } .chat-web-toggle input[type="file"] { max-width: 12rem; font-size: .7rem; } .chat-mode { display: inline-flex; align-items: center; gap: .35rem; color: var(--muted, #94a3b8); font-size: .8rem; } .chat-mode select { min-width: 8rem; } @media (max-width: 680px) { .research-chat-modal { padding: 8px; } .research-chat-dialog { grid-template-columns: 1fr; height: 94vh; } .chat-rooms { max-height: 130px; overflow-y: auto; border-right: 0; border-bottom: 1px solid var(--line, #334155); } .chat-room-list { grid-template-columns: repeat(auto-fill, minmax(120px, 1fr)); } .chat-settings-grid { grid-template-columns: 1fr; } .chat-settings-wide { grid-column: auto; } } @media (max-width: 980px) and (min-width: 681px) { .research-chat-dialog { grid-template-columns: 220px minmax(0, 1fr); } } .experiment-workflow { display: grid; gap: 10px; margin: 0 0 10px; padding: 12px; border: 1px solid var(--line); border-radius: 4px; background: rgba(7, 20, 30, .72); } .experiment-workflow-header, .workflow-actions { display: flex; align-items: center; justify-content: space-between; gap: 12px; } .experiment-workflow h3 { margin: 2px 0 0; font-size: 1rem; } .experiment-workflow output { color: var(--muted); font-size: .78rem; } .experiment-workflow output[data-state="completed"] { color: var(--color-success); } .experiment-workflow output[data-state="error"] { color: var(--color-danger); } .workflow-steps { display: grid; grid-template-columns: repeat(6, minmax(0, 1fr)); gap: 4px; margin: 0; padding: 0; list-style: none; counter-reset: workflow; } .workflow-steps li { min-width: 0; padding: 5px 6px; border-left: 2px solid var(--accent2); background: rgba(64, 224, 208, .05); color: var(--muted); font-size: .7rem; overflow-wrap: anywhere; } .workflow-form-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px; } .workflow-form-grid label { display: grid; gap: 4px; color: var(--muted); font-size: .72rem; } .workflow-form-grid input, .workflow-form-grid select, .workflow-form-grid textarea { min-width: 0; padding: 6px 8px; border: 1px solid var(--line); border-radius: 3px; background: rgba(0, 0, 0, .2); color: var(--text); font: inherit; } .workflow-field-hint { color: var(--muted); font-size: .65rem; } .workflow-wide { grid-column: 1 / -1; } .workflow-actions { align-items: flex-start; } .workflow-actions pre { flex: 1; min-width: 0; margin: 0; color: var(--muted); font: .72rem/1.4 var(--font-mono); white-space: pre-wrap; } .workflow-progress-row { display: grid; grid-template-columns: auto minmax(120px, 1fr) auto; align-items: center; gap: 8px; color: var(--muted); font-size: .72rem; } .workflow-progress-track { position: relative; height: 7px; overflow: hidden; border-radius: 4px; background: rgba(255, 255, 255, .1); } .workflow-progress-track b { display: block; width: 0; height: 100%; border-radius: inherit; background: var(--accent2); transition: width .25s ease; } .workflow-progress-track.is-running b { width: 38% !important; background: var(--color-success); animation: workflow-progress-sweep 1.2s ease-in-out infinite; } @keyframes workflow-progress-sweep { 0%, 100% { transform: translateX(-105%); } 50% { transform: translateX(205%); } } .workflow-batch-dialog { width: min(820px, calc(100vw - 24px)); max-width: 100%; max-height: calc(100dvh - 24px); padding: 0; border: 1px solid var(--line-soft, var(--line)); border-radius: var(--surface-radius, 8px); background: var(--surface-1, var(--panel)); color: var(--text); } .workflow-batch-dialog::backdrop { background: rgba(0, 7, 13, .78); backdrop-filter: blur(6px); } .workflow-batch-dialog form { display: grid; gap: 12px; padding: 18px; } .workflow-batch-plan-note { margin: 0; color: var(--muted); font-size: .75rem; line-height: 1.45; } .workflow-batch-dialog header, .workflow-batch-dialog footer { display: flex; align-items: center; justify-content: space-between; gap: 12px; } .workflow-batch-dialog header h2 { margin: 2px 0; } .workflow-batch-dialog fieldset { display: grid; gap: 6px; max-height: 42vh; overflow: auto; margin: 0; padding: 10px; border: 1px solid var(--line); } .workflow-batch-protocols { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 6px; } .workflow-batch-protocol { display: grid; grid-template-columns: auto minmax(0, 1fr); align-items: start; gap: 8px; padding: 8px; border: 1px solid var(--line); border-radius: var(--control-radius); background: var(--surface-2, rgba(255,255,255,.04)); } .workflow-batch-protocol span { display: grid; gap: 2px; min-width: 0; } .workflow-batch-protocol small { color: var(--muted); overflow-wrap: anywhere; } .workflow-batch-protocol-exploratory { border-color: color-mix(in srgb, var(--status-warn) 45%, var(--line)); } .workflow-batch-protocol-exploratory small { color: var(--status-warn); } .workflow-batch-selection-tools { display: flex; gap: 6px; flex-wrap: wrap; grid-column: 1 / -1; } .workflow-batch-protocol em { display: flex; flex-wrap: wrap; align-items: center; gap: 4px; color: var(--muted); font-size: .65rem; font-style: normal; } .workflow-batch-protocol em input { width: 86px; min-width: 0; padding: 3px 5px; font: .65rem var(--font-mono); } .workflow-batch-protocol em input[readonly] { cursor: default; opacity: .8; } .workflow-batch-dialog .modal-close { flex: 0 0 auto; } .workflow-batch-result { min-height: 1.5rem; max-height: 180px; margin: 0; padding: 8px; overflow: auto; border: 1px solid var(--line); background: rgba(0, 0, 0, .18); color: var(--text); font: .72rem/1.4 var(--font-mono); white-space: pre-wrap; } @media (max-width: 680px) { .workflow-batch-protocols { grid-template-columns: 1fr; } .workflow-batch-dialog form { padding: 12px; } } @media (max-width: 680px) { .workflow-steps { grid-template-columns: repeat(3, minmax(0, 1fr)); } .workflow-form-grid { grid-template-columns: 1fr; } .workflow-wide { grid-column: auto; } .workflow-actions { align-items: stretch; flex-direction: column; } } #tab-network [hidden], #tab-gate [hidden] { display: none; } @media (min-width: 1101px) { #tab-network.active { grid-template-rows: auto auto repeat(2, minmax(0, auto)); align-content: start; } #tab-network > .workspace-header, #tab-network > .workspace-view-tabs { grid-column: 1 / -1; } #tab-network > [data-network-view="inspect"], #tab-network > [data-network-view="data"] { align-self: start; } #tab-research .fm-layout { height: 720px; min-height: 720px; max-height: 720px; } #tab-research .fm-tree, #tab-research .fm-viewer { overflow: auto; } #tab-settings .parameter-table-wrap { max-height: 635px; overflow: auto; } #tab-gate .release-board { min-height: 0; } } @media (max-width: 680px) { .workspace-view-tabs, .research-lanes { overflow-x: auto; } .workspace-view-tabs button, .research-lanes button { flex: none; } } /* ============================================================================ EMBODIMENT CLOSED LOOP ============================================================================ */ #tab-embodiment.active { display: grid; grid-template-rows: auto minmax(300px, 1fr) auto auto auto; gap: 8px; } .runtime-clock-panel { margin: 9px 0 0; padding: 8px 10px; border: 1px solid rgba(102, 170, 181, .25); background: rgba(5, 22, 32, .48); } .organism-core > .runtime-clock-panel { z-index: 5; position: relative; flex: 0 0 auto; width: min(84%, 560px); margin: 16px 0 0; } .organism-core > .brain5d-being { flex: 0 1 auto; max-height: min(62%, 360px); } .runtime-clock-panel > header, .runtime-clock-readout { display: flex; align-items: center; justify-content: space-between; gap: 14px; } .runtime-clock-panel > header > div { min-width: 0; } .runtime-clock-panel h3 { margin: 2px 0 0; font-size: 10px; } .runtime-clock-panel > header > strong { color: #7ff5df; font: 10px var(--font-mono); } .runtime-clock-control { display: grid; gap: 7px; margin: 14px 0 10px; color: #b9d9dc; font: 10px var(--font-mono); } .runtime-clock-control output { color: #effcff; } .runtime-clock-control input { width: 100%; accent-color: #7ff5df; } .runtime-clock-readout { flex-wrap: wrap; justify-content: flex-start; color: #75959f; font: 9px var(--font-mono); } .runtime-clock-readout b { color: #b9f5e3; font-weight: 500; } .embodiment-living-map { --activity: 0; --energy: 0; --synchrony: 0; --pulse-duration: 3.2s; position: relative; display: grid; grid-template-columns: minmax(180px, 230px) minmax(360px, 1fr) minmax(180px, 230px); min-height: 0; overflow: hidden; border: 1px solid rgba(72, 179, 197, .28); border-radius: 7px; background: radial-gradient(circle at 50% 48%, rgba(95, 52, 164, .2), transparent 34%), radial-gradient(circle at 48% 100%, rgba(28, 187, 177, .14), transparent 42%), linear-gradient(145deg, rgba(3, 13, 23, .98), rgba(4, 22, 31, .96)); box-shadow: inset 0 0 80px rgba(0, 0, 0, .42); } .embodiment-anatomy { grid-template-columns: minmax(190px, 25%) minmax(380px, 1fr) minmax(190px, 25%); grid-template-rows: minmax(0, 1fr) auto; gap: 0; overflow: hidden; } .anatomy-zone { z-index: 2; position: relative; display: flex; flex-direction: column; min-width: 0; padding: 16px 14px; background: rgba(2, 15, 25, .62); } .anatomy-senses { border-right: 1px solid rgba(83, 218, 218, .22); } .anatomy-actuators { border-left: 1px solid rgba(255, 164, 77, .22); } .anatomy-zone header, .anatomy-inner header { display: flex; align-items: flex-start; gap: 9px; } .pipeline-toggle { display: inline-flex; align-items: center; gap: 4px; margin-left: auto; color: #79a5ab; font: 700 7px var(--font-mono); cursor: pointer; white-space: nowrap; } .pipeline-toggle input { appearance: none; width: 26px; height: 14px; margin: 0; border: 1px solid #456b73; border-radius: 8px; background: #102832; cursor: pointer; } .pipeline-toggle input::after { display: block; width: 8px; height: 8px; margin: 2px; border-radius: 50%; background: #66828a; content: ""; transition: transform .16s ease, background .16s ease; } .pipeline-toggle input:checked { border-color: #49decf; background: rgba(38, 144, 137, .35); } .pipeline-toggle input:checked::after { background: #7ff5df; transform: translateX(12px); } .pipeline-toggle input[data-implemented="false"] { border-style: dashed; } .pipeline-toggle input:focus-visible { outline: 2px solid #7ff5df; outline-offset: 2px; } .embodiment-loop-node .pipeline-toggle { position: absolute; right: 6px; bottom: 5px; } .embodiment-loop-node { position: relative; } .zone-index { color: #4fe4d5; font: 700 9px var(--font-mono); } .anatomy-actuators .zone-index { color: #ffad60; } .zone-kicker { color: #6dd9e0; font: 700 8px var(--font-mono); letter-spacing: .12em; } .anatomy-actuators .zone-kicker { color: #ffb469; } .anatomy-zone h3, .anatomy-inner h3 { margin: 2px 0 3px; color: #f0fbff; font-size: 16px; } .anatomy-zone p { margin: 0; color: #7895a3; font-size: 9px; line-height: 1.35; } .sense-orbit { position: relative; display: grid; place-items: center; width: min(100%, 128px); aspect-ratio: 1; margin: 12px auto 10px; } .orbit-line { position: absolute; inset: 12%; border: 1px dashed rgba(76, 226, 219, .48); border-radius: 50%; animation: vital-spin 18s linear infinite; } .sense-node { z-index: 1; display: grid; place-items: center; width: 29px; aspect-ratio: 1; border: 1px solid #46dfd1; border-radius: 50%; background: #082e39; color: #b9fff6; font: 700 7px var(--font-mono); font-style: normal; box-shadow: 0 0 18px rgba(54, 225, 207, .28); } .sense-node:nth-child(1) { position: absolute; top: 0; } .sense-node:nth-child(2) { position: absolute; right: 0; } .sense-node:nth-child(3) { position: absolute; bottom: 0; } .sense-node:nth-child(4) { position: absolute; left: 0; } .anatomy-stats { display: grid; gap: 7px; margin: auto 0 12px; } .anatomy-stats div { display: flex; justify-content: space-between; gap: 8px; border-bottom: 1px solid rgba(100, 158, 169, .14); padding-bottom: 4px; font: 9px var(--font-mono); } .anatomy-stats dt { overflow: hidden; color: #75909d; text-overflow: ellipsis; white-space: nowrap; } .anatomy-stats dd { max-width: 50%; margin: 0; overflow: hidden; color: #68f0c1; text-align: right; text-overflow: ellipsis; white-space: nowrap; } .anatomy-actuators .anatomy-stats dd { color: #ffb15e; } .zone-state { padding-top: 8px; border-top: 1px solid rgba(100, 158, 169, .18); color: #6c8d99; font: 700 8px var(--font-mono); text-transform: uppercase; } .limb-stack { display: grid; gap: 7px; margin: 22px 0 18px; } .limb-stack i { display: flex; align-items: center; height: 24px; padding-left: 12px; border-left: 3px solid #ff9d4c; background: linear-gradient(90deg, rgba(255, 126, 63, .22), transparent); color: #ffd09b; font: 700 9px var(--font-mono); font-style: normal; letter-spacing: .1em; } .limb-stack i:nth-child(2) { width: 82%; } .limb-stack i:nth-child(3) { width: 66%; } .limb-stack i:nth-child(4) { width: 90%; } .brain-database { grid-row: 1; } .brain-database .brain5d-being { width: min(100%, 660px); opacity: .8; } .organism-node-key { z-index: 4; position: absolute; right: 7%; bottom: 8%; left: 7%; display: grid; grid-template-columns: repeat(6, minmax(0, 1fr)); gap: 4px; pointer-events: none; } .organism-node-key span { min-width: 0; padding: 4px 2px; border: 1px solid rgba(125, 232, 213, .36); background: rgba(3, 24, 31, .82); color: #b7f8e8; font: 700 7px var(--font-mono); text-align: center; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; } .organism-node-key span:nth-child(3n) { border-color: rgba(228, 179, 95, .5); color: #ffe1a6; } .brain-core-mark { z-index: 4; position: absolute; top: 37%; left: 50%; display: grid; place-items: center; gap: 4px; transform: translate(-50%, -50%); text-align: center; } .core-pulse { width: 38px; aspect-ratio: 1; border: 1px solid #ff9c66; border-radius: 50%; box-shadow: 0 0 22px rgba(255, 134, 83, .65), inset 0 0 12px rgba(255, 184, 100, .52); animation: core-beat 1.8s ease-in-out infinite; } .core-label { color: #ffc28f; font: 700 8px var(--font-mono); letter-spacing: .16em; } .brain-core-mark strong { color: #fff2e6; font: 700 12px var(--font-mono); line-height: 1.15; } .brain-core-mark small { color: #ffb784; font: 8px var(--font-mono); text-transform: uppercase; } .brain-core-metrics { z-index: 3; position: absolute; top: 8%; display: flex; gap: 14px; color: #7696a2; font: 8px var(--font-mono); } .brain-core-metrics b { color: #dffaff; } .anatomy-inner { z-index: 3; grid-column: 2; grid-row: 2; padding: 10px 16px 12px; border-top: 1px solid rgba(255, 150, 92, .3); background: rgba(27, 19, 24, .78); } .anatomy-inner header { align-items: center; } .anatomy-inner .zone-index { color: #ff9e68; } .anatomy-inner .zone-kicker { color: #ffb784; } .anatomy-inner h3 { font-size: 11px; } .inner-status { margin-left: auto; color: #ffb784; font: 8px var(--font-mono); text-transform: uppercase; } .inner-state-grid { display: grid; grid-template-columns: repeat(6, 1fr); gap: 7px; margin-top: 8px; } .inner-state-grid span { display: grid; gap: 3px; min-width: 0; padding: 6px 7px; border-left: 2px solid rgba(255, 151, 92, .5); background: rgba(255, 143, 76, .07); } .inner-state-grid b { overflow: hidden; color: #ffd09b; font: 700 12px var(--font-mono); text-overflow: ellipsis; white-space: nowrap; } .inner-state-grid small { overflow: hidden; color: #947f79; font: 7px var(--font-mono); text-overflow: ellipsis; white-space: nowrap; } .inner-detail { display: flex; flex-wrap: wrap; gap: 12px; margin-top: 8px; color: #967d78; font: 8px var(--font-mono); } .inner-detail b { color: #e7b9a0; } @keyframes core-beat { 50% { transform: scale(1.18); opacity: .7; } } .embodiment-living-map::before { position: absolute; inset: 0; background-image: linear-gradient(rgba(103, 211, 225, .035) 1px, transparent 1px), linear-gradient(90deg, rgba(103, 211, 225, .035) 1px, transparent 1px); background-size: 32px 32px; content: ""; mask-image: radial-gradient(circle at center, #000 25%, transparent 80%); pointer-events: none; } .organism-rail { z-index: 2; display: grid; grid-template-rows: repeat(3, minmax(0, 1fr)); gap: 6px; min-height: 0; padding: 8px; } .organ-panel { position: relative; min-height: 0; overflow: hidden; padding: 9px 10px; border: 1px solid rgba(74, 167, 184, .24); border-radius: 5px; background: rgba(3, 17, 27, .76); backdrop-filter: blur(8px); } .organ-panel::after { position: absolute; right: -16px; bottom: -22px; width: 70px; height: 70px; border: 1px solid rgba(78, 230, 211, calc(.08 + var(--activity) * .24)); border-radius: 50%; content: ""; animation: organ-radar var(--pulse-duration) ease-out infinite; } .organ-panel > span, .embodiment-system-strip article > span { color: #78d8e4; font-family: var(--font-mono); font-size: 8px; font-weight: 700; letter-spacing: .08em; } .organ-panel h3 { margin: 2px 0 5px; color: #edfaff; font-size: 11px; font-weight: 650; } .organ-panel dl { display: grid; gap: 3px; margin: 0; } .organ-panel dl div { display: flex; justify-content: space-between; gap: 8px; min-width: 0; font-family: var(--font-mono); font-size: 9px; } .organ-panel dt { overflow: hidden; color: #8298a6; text-overflow: ellipsis; white-space: nowrap; } .organ-panel dd { max-width: 55%; margin: 0; overflow: hidden; color: #68f0c1; text-align: right; text-overflow: ellipsis; white-space: nowrap; } .organ-panel[data-organ="dynamics"] dd, .organ-panel[data-organ="learning"] dd { color: #d983ff; } .organ-panel[data-organ="homeostasis"] dd, .organ-panel[data-organ="action"] dd { color: #ffb15e; } .organ-panel[data-organ="perception"] dd { color: #60dfff; } .organism-core { position: relative; display: flex; flex-direction: column; align-items: center; justify-content: center; padding: 8px 0 28px; min-width: 0; min-height: 0; margin: 0; isolation: isolate; } .brain5d-being { z-index: 2; width: min(100%, 760px); max-height: 88%; object-fit: contain; filter: drop-shadow(0 0 calc(12px + 18px * var(--energy)) rgba(77, 225, 255, .62)) drop-shadow(0 0 calc(10px + 15px * var(--activity)) rgba(191, 77, 255, .48)); transform-origin: 48% 58%; animation: being-breathe 5s ease-in-out infinite; } .organism-field, .organism-field i, .organism-particles { position: absolute; inset: 0; pointer-events: none; } .organism-field i { inset: 50% auto auto 50%; width: min(58vw, 440px); aspect-ratio: 1; border: 1px solid rgba(87, 230, 218, calc(.1 + var(--synchrony) * .28)); border-radius: 50%; transform: translate(-50%, -50%); animation: being-field var(--pulse-duration) ease-out infinite; } .organism-field i:nth-child(2) { animation-delay: calc(var(--pulse-duration) * -.33); } .organism-field i:nth-child(3) { animation-delay: calc(var(--pulse-duration) * -.66); } .organism-particles i { position: absolute; width: 3px; height: 3px; border-radius: 50%; background: #c8ffff; box-shadow: 0 0 9px #59e8ff; animation: being-particle calc(3.8s - var(--activity) * 2s) linear infinite; } .organism-particles i:nth-child(1) { left: 12%; top: 65%; animation-delay: -1.1s; } .organism-particles i:nth-child(2) { left: 19%; top: 31%; animation-delay: -2.7s; } .organism-particles i:nth-child(3) { left: 27%; top: 78%; animation-delay: -.4s; } .organism-particles i:nth-child(4) { left: 34%; top: 18%; animation-delay: -3.2s; } .organism-particles i:nth-child(5) { left: 42%; top: 69%; animation-delay: -2s; } .organism-particles i:nth-child(6) { left: 49%; top: 27%; animation-delay: -.8s; } .organism-particles i:nth-child(7) { left: 57%; top: 81%; animation-delay: -3.5s; } .organism-particles i:nth-child(8) { left: 64%; top: 21%; animation-delay: -1.6s; } .organism-particles i:nth-child(9) { left: 70%; top: 61%; animation-delay: -2.3s; } .organism-particles i:nth-child(10) { left: 78%; top: 36%; animation-delay: -.2s; } .organism-particles i:nth-child(11) { left: 84%; top: 72%; animation-delay: -2.9s; } .organism-particles i:nth-child(12) { left: 91%; top: 24%; animation-delay: -1.3s; } .organ-label { z-index: 3; position: absolute; display: grid; min-width: 62px; padding: 5px 7px; border: 1px solid rgba(103, 226, 239, .35); border-radius: 3px; background: rgba(2, 17, 28, .84); color: #a9f8ff; font-family: var(--font-mono); font-size: 8px; font-weight: 800; text-align: center; } .organ-label small { color: #788f9e; font-size: 7px; text-transform: uppercase; } .organ-label-sense { top: 22%; right: 5%; } .organ-label-think { top: 18%; left: 43%; } .organ-label-act { right: 12%; bottom: 14%; } .organism-vital { z-index: 3; position: absolute; bottom: 10%; left: 5%; display: grid; place-items: center; width: 84px; height: 84px; color: #90ff7b; font-family: var(--font-mono); } .vital-ring { position: absolute; inset: 0; border: 2px solid currentColor; border-right-color: transparent; border-radius: 50%; opacity: .7; animation: vital-spin 6s linear infinite; } .organism-vital strong { font-size: 11px; } .organism-vital small { margin-top: 25px; color: #77909c; font-size: 6px; } .embodiment-living-map[data-system-state="error"] .organism-vital { color: var(--danger); } .embodiment-living-map[data-system-state="running"] .organism-vital { color: #69f2b2; } .embodiment-living-map[data-system-state="paused"] .organism-vital { color: var(--warning); } .organism-core figcaption { z-index: 3; position: relative; display: grid; width: min(82%, 560px); flex: 0 0 auto; margin: 12px 0 0; color: #8199a7; font-family: var(--font-mono); font-size: 8px; text-align: center; } .organism-core figcaption strong { color: #dffbff; font-size: 10px; letter-spacing: .06em; } .organism-core figcaption span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } @media (min-width: 1101px) { .organism-core { display: grid; grid-template-columns: minmax(0, 1fr) minmax(190px, 28%); grid-template-rows: minmax(0, 1fr) auto; column-gap: clamp(10px, 1.5vw, 24px); align-items: center; justify-items: center; padding: 8px 14px 22px; } .organism-core > .brain5d-being { grid-column: 1; grid-row: 1; width: min(100%, 560px); max-height: min(72vh, 360px); } .organism-core > .runtime-clock-panel { grid-column: 2; grid-row: 1; width: 100%; max-width: 300px; margin: 0; align-self: center; } .organism-core > figcaption { grid-column: 1 / -1; grid-row: 2; width: min(100%, 560px); margin: 8px 0 0; } } .embodiment-system-strip { display: grid; grid-template-columns: repeat(6, minmax(0, 1fr)); gap: 5px; } .connection-manager { min-width: 0; padding: 7px 8px; border: 1px solid rgba(72, 179, 197, .28); border-radius: 6px; background: rgba(3, 17, 27, .82); } .connection-manager > header { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-bottom: 6px; } .connection-manager h3 { display: inline; margin: 0 0 0 7px; font-size: 12px; } .connection-summary { display: flex; gap: 12px; color: #7f96a3; font-family: var(--font-mono); font-size: 8px; } .connection-summary strong { color: #7ff0ce; } .connection-graph { display: grid; grid-auto-columns: minmax(132px, 1fr); grid-auto-flow: column; gap: 5px; min-height: 74px; overflow-x: auto; scrollbar-width: thin; } .connection-node { position: relative; display: grid; grid-template-rows: auto auto 1fr auto; min-width: 132px; padding: 6px 7px; border: 1px solid rgba(111, 139, 153, .2); border-radius: 4px; background: rgba(4, 24, 35, .9); } .connection-node::before { position: absolute; top: -7px; left: 50%; width: 1px; height: 7px; background: rgba(82, 218, 226, .35); content: ""; } .connection-node > div { display: grid; grid-template-columns: 8px minmax(0, 1fr) auto; align-items: center; gap: 4px; } .connection-node i { width: 6px; height: 6px; border-radius: 50%; background: #526875; box-shadow: 0 0 0 transparent; } .connection-node[data-status="available"] i, .connection-node[data-status="connected"] i { background: #65e7c7; box-shadow: 0 0 7px rgba(101, 231, 199, .75); } .connection-node[data-status="degraded"] i { background: #ffc857; } .connection-node[data-status="denied"] i, .connection-node[data-status="error"] i { background: #ff667d; } .connection-node strong, .connection-node small, .connection-node p, .connection-trust { overflow: hidden; font-family: var(--font-mono); text-overflow: ellipsis; white-space: nowrap; } .connection-node strong { color: #dffaff; font-size: 8px; } .connection-node small { color: #6493a5; font-size: 6px; text-transform: uppercase; } .connection-node p { margin: 2px 0 0; color: #7e97a4; font-size: 7px; } .connection-node .connection-capabilities { color: #59b9c8; } .connection-trust { color: #75858d; font-size: 6px; } .connection-node[data-status="connected"] .connection-trust { color: #76edb8; } .connection-empty { margin: auto; color: var(--muted); font-size: 9px; } .embodiment-detail-modal[hidden] { display: none; } .embodiment-detail-modal { z-index: 30; position: fixed; inset: 0; display: grid; place-items: center; padding: 20px; background: rgba(0, 7, 13, .78); backdrop-filter: blur(5px); } .embodiment-detail-dialog { width: min(620px, 100%); max-height: min(720px, 90vh); overflow: auto; border: 1px solid rgba(92, 224, 215, .4); border-radius: 7px; background: #071a26; box-shadow: 0 18px 70px rgba(0, 0, 0, .55); } .embodiment-detail-dialog > header { display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; padding: 16px 18px 11px; border-bottom: 1px solid rgba(102, 170, 181, .2); } .embodiment-detail-dialog h2 { margin: 3px 0 0; color: #effcff; font-size: 18px; } .embodiment-detail-dialog .modal-close { min-width: 30px; height: 30px; border: 1px solid rgba(118, 172, 181, .3); border-radius: 4px; background: transparent; color: #b4d5da; font-size: 20px; cursor: pointer; } .embodiment-detail-dialog > p { margin: 0; padding: 13px 18px 8px; color: #8caab2; font-size: 10px; line-height: 1.45; } .embodiment-detail-fields { display: grid; grid-template-columns: minmax(150px, .7fr) minmax(0, 1.3fr); margin: 0; padding: 5px 18px 14px; } .embodiment-detail-fields dt, .embodiment-detail-fields dd { margin: 0; padding: 8px 0; border-bottom: 1px solid rgba(102, 170, 181, .12); font: 9px var(--font-mono); } .embodiment-detail-fields dt { color: #75959f; } .embodiment-detail-fields dd { overflow-wrap: anywhere; color: #b9f5e3; text-align: right; } .embodiment-detail-dialog > footer { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 11px 18px; border-top: 1px solid rgba(102, 170, 181, .2); color: #65838c; font: 8px var(--font-mono); } .anatomy-zone[role="button"], .organism-core[role="button"], .anatomy-inner[role="button"], .embodiment-system-strip article[role="button"], .connection-node { cursor: pointer; } .anatomy-zone[role="button"]:focus-visible, .organism-core[role="button"]:focus-visible, .anatomy-inner[role="button"]:focus-visible, .embodiment-system-strip article[role="button"]:focus-visible, .connection-node:focus-visible { outline: 2px solid #7ff5df; outline-offset: -2px; } .embodiment-system-strip article { display: grid; min-width: 0; padding: 7px 9px; border: 1px solid rgba(74, 167, 184, .22); border-radius: 4px; background: rgba(4, 19, 29, .78); } .embodiment-system-strip strong, .embodiment-system-strip small { overflow: hidden; font-family: var(--font-mono); text-overflow: ellipsis; white-space: nowrap; } .embodiment-system-strip strong { color: #e5faff; font-size: 9px; } .embodiment-system-strip small { color: #7f96a3; font-size: 7px; } .embodiment-system-strip b { color: #65e7c7; font-weight: 700; } @keyframes being-breathe { 0%, 100% { transform: translateY(2px) scale(.985); } 50% { transform: translateY(-6px) scale(1.015); } } @keyframes being-field { 0% { opacity: 0; transform: translate(-50%, -50%) scale(.55); } 35% { opacity: calc(.2 + var(--synchrony) * .55); } 100% { opacity: 0; transform: translate(-50%, -50%) scale(1.3); } } @keyframes being-particle { 0% { opacity: 0; transform: translate3d(-8px, 20px, 0) scale(.5); } 20%, 70% { opacity: calc(.25 + var(--activity) * .75); } 100% { opacity: 0; transform: translate3d(16px, -42px, 0) scale(1.4); } } @keyframes vital-spin { to { transform: rotate(360deg); } } @keyframes organ-radar { 0% { opacity: .7; transform: scale(.45); } 100% { opacity: 0; transform: scale(1.3); } } .embodiment-loop { display: grid; grid-template-columns: repeat(6, minmax(0, 1fr) 20px); align-items: center; gap: 4px; margin-top: 10px; padding: 8px; border: 1px solid var(--line); border-radius: 6px; background: rgba(7, 20, 30, .78); } .embodiment-loop-node { display: grid; grid-template-columns: 24px 1fr; gap: 2px 7px; min-width: 0; padding: 8px; border: 1px solid var(--line); border-radius: 4px; background: rgba(255, 255, 255, .025); } .embodiment-loop-node > span { grid-row: 1 / 3; display: grid; place-items: center; width: 24px; height: 24px; border-radius: 50%; background: rgba(142, 178, 193, .12); color: var(--muted); font-size: 10px; } .embodiment-loop-node strong { overflow: hidden; font-size: 10px; text-overflow: ellipsis; white-space: nowrap; } .embodiment-loop-node small { overflow: hidden; color: var(--muted); font-size: 8px; text-overflow: ellipsis; text-transform: uppercase; white-space: nowrap; } .embodiment-loop-node[data-status="active"], .embodiment-loop-node[data-status="running"], .embodiment-loop-node[data-status="simulated"], .embodiment-loop-node[data-status="digital"], .embodiment-loop-node[data-status="physical"], .embodiment-loop-node[data-status="hybrid"] { border-color: var(--color-success); box-shadow: inset 0 0 0 1px rgba(36, 180, 110, .1); } .embodiment-loop-node[data-status="active"] > span, .embodiment-loop-node[data-status="running"] > span { background: var(--color-success); color: #fff; } .embodiment-loop > i { color: var(--accent2); font-style: normal; text-align: center; } #tab-embodiment .embodiment-grid { grid-template-columns: repeat(4, minmax(0, 1fr)); } .embodiment-contract-note { grid-column: 1 / -1; margin-bottom: 0; padding-top: 8px; border-top: 1px solid var(--line); font-family: var(--font-mono); font-size: 10px; } @media (max-width: 1100px) { #tab-embodiment.active { grid-template-rows: auto auto auto auto auto; } #tab-embodiment .workspace-header, #tab-embodiment .workspace-status-strip { min-width: 0; } #tab-embodiment .workspace-header { align-items: flex-start; flex-wrap: wrap; } #tab-embodiment .workspace-status-strip { width: 100%; justify-content: flex-start; flex-wrap: wrap; } .embodiment-living-map { grid-template-columns: 1fr; overflow: visible; } .embodiment-anatomy { grid-template-columns: 1fr; grid-template-rows: auto auto auto auto; } .anatomy-senses, .anatomy-actuators { border: 0; border-bottom: 1px solid rgba(83, 218, 218, .22); } .anatomy-actuators { border-color: rgba(255, 164, 77, .22); } .anatomy-senses { grid-row: 1; } .brain-database { grid-row: 2; min-height: clamp(280px, 42vh, 430px); } .anatomy-inner { grid-column: 1; grid-row: 3; } .anatomy-actuators { grid-row: 4; } .organism-core { grid-row: 1; min-height: clamp(280px, 42vh, 430px); } .organism-rail { grid-template-columns: repeat(3, minmax(0, 1fr)); grid-template-rows: auto; } .organism-rail-left { grid-row: 2; } .organism-rail-right { grid-row: 3; } .embodiment-system-strip { grid-template-columns: repeat(3, minmax(0, 1fr)); } .connection-graph { grid-auto-columns: minmax(150px, 42vw); } .embodiment-loop { grid-template-columns: repeat(3, minmax(0, 1fr) 18px); } #tab-embodiment .embodiment-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } } @media (max-width: 680px) { .runtime-clock-panel { padding: 8px; } .runtime-clock-panel > header { align-items: flex-start; } .runtime-clock-readout { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; } .runtime-clock-readout span { min-width: 0; overflow-wrap: anywhere; } #tab-embodiment .workspace-status-strip { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); } #tab-embodiment .workspace-status-strip span { min-width: 0; } .organism-core, .brain-database { min-height: 280px; } .anatomy-zone { padding: 13px 12px; } .sense-orbit { width: 130px; margin: 14px auto; } .inner-state-grid { grid-template-columns: repeat(3, 1fr); } .brain-core-metrics { top: 4%; gap: 7px; font-size: 7px; } .organism-rail, .embodiment-system-strip { grid-template-columns: 1fr 1fr; } .connection-manager > header { align-items: flex-start; flex-direction: column; } .brain5d-being { width: 100%; max-width: none; } .organism-node-key { right: 3%; bottom: 4%; left: 3%; } .organism-node-key span { font-size: 6px; } .organism-vital { width: 66px; height: 66px; } .embodiment-loop { grid-template-columns: 1fr; } .embodiment-loop > i { transform: rotate(90deg); } #tab-embodiment .embodiment-grid { grid-template-columns: 1fr; } } @media (prefers-reduced-motion: reduce) { .brain5d-being, .organism-field i, .organism-particles i, .organ-panel::after, .vital-ring { animation: none !important; } } #tab-overview .metric { padding: 12px 14px; } #tab-overview .metric span { font-size: 10px; } #tab-overview .metric strong { font-size: 20px; margin-top: 4px; } #tab-overview .detail-grid { gap: 10px; margin-top: 10px; grid-template-columns: repeat(4, minmax(200px, 1fr)); } #tab-overview .panel { padding: 14px; } #tab-overview .panel-title h2 { font-size: 14px; } #tab-overview .panel-title p { font-size: 10px; } #tab-overview .kv { margin: 12px 0 0; gap: 6px; } #tab-overview .kv div { padding-bottom: 4px; } #tab-overview .kv dt, #tab-overview .kv dd { font-size: 0.82rem; } #tab-overview .bar { height: 6px; margin-top: 10px; } #tab-overview .snapshot-info-card { padding: 12px 14px; margin-top: 10px; } #tab-overview .snapshot-info-grid { gap: 8px; } #tab-overview .snapshot-info-item span { font-size: 10px; } #tab-overview .snapshot-info-item strong { font-size: 0.85rem; } .snapshot-info-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px; margin-top: 10px; } .snapshot-info-item { display: flex; flex-direction: column; gap: 4px; padding: 10px 14px; background: #050d14; border-radius: 8px; border: 1px solid #16394b; } .snapshot-info-item span { font-size: 11px; color: var(--muted); text-transform: uppercase; letter-spacing: .5px; } .snapshot-info-item strong { font-size: 15px; font-family: var(--font-mono); color: var(--accent); } .heatmap-panel { padding: 20px; margin-top: 14px; } .heatmap-split { display: flex; gap: 12px; margin-top: 16px; } .heatmap-wrap { flex: 2; background: #050d14; border-radius: 12px; overflow: hidden; border: 1px solid #16394b; position: relative; } .projection-wrap { flex: 1; background: #050d14; border-radius: 12px; overflow: hidden; border: 1px solid #16394b; position: relative; min-width: 200px; } #heatmap { width: 100%; height: 420px; display: block; image-rendering: pixelated; } #projection-5d { width: 100%; height: 420px; display: block; } .heatmap-meta { position: absolute; left: 12px; bottom: 10px; padding: 6px 12px; background: rgba(0, 0, 0, .65); border-radius: 8px; color: var(--muted); font-size: 12px; font-family: var(--font-mono); backdrop-filter: blur(4px); border: 1px solid rgba(255, 255, 255, 0.05); } @media (max-width: 900px) { .heatmap-split { flex-direction: column; } .projection-wrap { min-width: auto; } #projection-5d { height: 250px; } } /* Button Group */ .button-group { display: flex; gap: 8px; flex-wrap: wrap; } .button-group button { border: 1px solid var(--line); color: var(--muted); background: #0a1823; border-radius: var(--radius-small); padding: 8px 14px; cursor: pointer; font-family: var(--font-family); font-size: 0.8rem; font-weight: 500; transition: all var(--transition-fast); } .button-group button:hover { border-color: rgba(255, 255, 255, 0.2); color: var(--text); } .button-group button.active { color: #071019; background: var(--accent2); border-color: var(--accent2); } /* ============================================================================ ROADMAP ============================================================================ */ .roadmap { padding: 14px 18px; display: flex; flex-direction: column; gap: 4px; color: var(--muted); font-size: 0.85rem; } .roadmap strong { color: var(--text); font-size: 1.1rem; font-weight: 600; } .roadmap.current { border-color: var(--accent); background: rgba(255, 159, 28, 0.05); } .roadmap.current strong { color: var(--accent); } /* ============================================================================ CONTROL PANEL ============================================================================ */ .control-card { border: 1px solid var(--line); border-radius: var(--radius-card); padding: 20px 24px; background: rgba(12, 18, 28, 0.92); box-shadow: var(--shadow-card); backdrop-filter: blur(8px); margin-bottom: 16px; } .control-card__header { display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; flex-wrap: wrap; } .control-card__title-group { flex: 1; min-width: 180px; } .control-card__title-group h2 { margin: 0; font-size: 1.15rem; font-weight: 600; } .control-card__subtitle { margin: 2px 0 0; font-size: 0.82rem; opacity: 0.65; color: var(--muted); } /* Runtime State Badge */ .runtime-state { display: inline-flex; align-items: center; gap: 6px; padding: 4px 14px; border-radius: var(--radius-pill); font-weight: 600; font-size: 0.78rem; text-transform: uppercase; letter-spacing: 0.06em; background: rgba(120, 140, 170, 0.15); color: #8899bb; transition: background var(--transition-fast), color var(--transition-fast); white-space: nowrap; } .runtime-state::before { content: ''; display: inline-block; width: 8px; height: 8px; border-radius: 50%; background: currentColor; opacity: 0.6; transition: background var(--transition-fast); } .runtime-state[data-mode="running"] { background: rgba(36, 180, 110, 0.2); color: #4ddb8a; } .runtime-state[data-mode="running"]::before { animation: pulse-running 1.2s ease-in-out infinite; } .runtime-state[data-mode="paused"] { background: rgba(230, 170, 40, 0.2); color: #f0c040; } .runtime-state[data-mode="stopped"], .runtime-state[data-mode="faulted"] { background: rgba(220, 70, 70, 0.2); color: #f06070; } .runtime-state[data-mode="idle"] { background: rgba(120, 140, 170, 0.1); color: #8899bb; } @keyframes pulse-running { 0%, 100% { opacity: 0.6; transform: scale(1); } 50% { opacity: 1; transform: scale(1.2); } } /* Runtime Metrics */ .runtime-metrics { display: grid; grid-template-columns: repeat(4, 1fr); gap: 10px; margin: 16px 0 18px; } .runtime-metrics .metric-item { padding: 10px 14px; border-radius: var(--radius-medium); background: rgba(255, 255, 255, 0.04); transition: background var(--transition-fast); } .runtime-metrics .metric-item:hover { background: rgba(255, 255, 255, 0.07); } .metric-label { display: block; font-size: 0.72rem; text-transform: uppercase; letter-spacing: 0.04em; opacity: 0.6; font-weight: 500; } .metric-value { display: block; margin-top: 2px; font-size: 1.1rem; font-weight: 600; font-family: var(--font-mono); color: var(--text); } /* Control Grid */ .control-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; margin-bottom: 12px; } .control-group { background: rgba(255, 255, 255, 0.03); border-radius: var(--radius-medium); padding: 12px 14px; border: 1px solid rgba(255, 255, 255, 0.05); transition: border-color var(--transition-fast), background var(--transition-fast); } .control-group:hover { border-color: rgba(255, 255, 255, 0.1); } .control-group__header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 8px; } .control-group__title { font-size: 0.72rem; font-weight: 600; text-transform: uppercase; letter-spacing: 0.06em; opacity: 0.6; } .shortcut-hint { font-size: 0.6rem; font-family: var(--font-mono); opacity: 0.35; background: rgba(255, 255, 255, 0.05); padding: 1px 8px; border-radius: 4px; } .control-group__body { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; } .input-label { display: flex; flex-direction: column; gap: 3px; font-size: 0.7rem; font-weight: 500; opacity: 0.7; flex: 1; min-width: 60px; } .input-label input { width: 100%; box-sizing: border-box; padding: 6px 10px; border-radius: var(--radius-small); border: 1px solid rgba(255, 255, 255, 0.12); background: rgba(0, 0, 0, 0.25); color: var(--text); font-size: 0.85rem; font-family: var(--font-mono); transition: border-color var(--transition-fast), box-shadow var(--transition-fast); min-width: 50px; } .input-label input:focus { outline: none; border-color: var(--color-primary); box-shadow: var(--shadow-focus); } .input-label input:hover { border-color: rgba(255, 255, 255, 0.25); } /* Buttons */ .control-group button, .operator-console button:not(.btn-approve):not(.btn-reject) { min-height: 34px; padding: 6px 14px; border: none; border-radius: var(--radius-small); cursor: pointer; font-weight: 600; font-size: 0.78rem; font-family: var(--font-family); transition: background var(--transition-fast), transform var(--transition-fast), box-shadow var(--transition-fast); display: inline-flex; align-items: center; gap: 6px; white-space: nowrap; } .control-group button:hover, .operator-console button:hover { transform: translateY(-1px); } .control-group button:active, .operator-console button:active { transform: translateY(0px); } .control-group button:disabled, .operator-console button:disabled { opacity: 0.4; cursor: not-allowed; transform: none !important; } .btn-primary { background: var(--color-primary); color: white; } .btn-primary:hover:not(:disabled) { background: var(--color-primary-hover); } .btn-success { background: var(--color-success); color: white; } .btn-success:hover:not(:disabled) { background: var(--color-success-hover); } .btn-warning { background: var(--color-warning); color: #1a1a1a; } .btn-warning:hover:not(:disabled) { background: var(--color-warning-hover); } .btn-danger { background: var(--color-danger); color: white; } .btn-danger:hover:not(:disabled) { background: var(--color-danger-hover); } .btn-info { background: var(--color-info); color: white; } .btn-info:hover:not(:disabled) { background: var(--color-info-hover); } .btn-secondary { background: rgba(255, 255, 255, 0.08); color: #c0c8d8; } .btn-secondary:hover:not(:disabled) { background: rgba(255, 255, 255, 0.15); } .btn-undo { background: rgba(230, 170, 40, 0.15); color: #e6aa28; } .btn-undo:hover:not(:disabled) { background: rgba(230, 170, 40, 0.25); } .btn-small { min-height: 28px; padding: 3px 12px; border: none; border-radius: var(--radius-small); cursor: pointer; font-weight: 500; font-size: 0.72rem; background: rgba(255, 255, 255, 0.06); color: #c0c8d8; transition: background var(--transition-fast), color var(--transition-fast); font-family: var(--font-family); } .btn-small:hover { background: rgba(255, 255, 255, 0.12); color: var(--text); } .btn-small.undo { background: rgba(230, 170, 40, 0.15); color: #e6aa28; } .btn-small.undo:hover { background: rgba(230, 170, 40, 0.25); } .btn-small.auto-approval { background: rgba(74, 124, 247, 0.15); color: var(--color-primary); } .btn-small.auto-approval:hover { background: rgba(74, 124, 247, 0.25); } .actions-row { display: flex; gap: 6px; flex-wrap: wrap; width: 100%; } .actions-row button { flex: 1; min-width: 60px; justify-content: center; } .shortcut-hint-inline { font-size: 0.55rem; opacity: 0.35; font-family: var(--font-mono); font-weight: 400; margin-left: 2px; } /* ============================================================================ SELF-ORGANIZATION SECTION ============================================================================ */ .self-org-section { margin-top: 14px; border-top: 1px solid rgba(255, 255, 255, 0.06); padding-top: 12px; } .self-org-summary { display: flex; align-items: center; justify-content: space-between; cursor: pointer; padding: 4px 0; user-select: none; list-style: none; gap: 12px; } .self-org-summary::-webkit-details-marker { display: none; } .self-org-summary h3 { margin: 0; font-size: 0.88rem; font-weight: 500; color: #c8d0e0; } .self-org-summary .badge { font-size: 0.68rem; padding: 2px 12px; border-radius: var(--radius-pill); background: rgba(255, 255, 255, 0.06); color: #8899bb; font-weight: 500; } /* CONFIG-AUTHORITATIVE structural states (Phase 6) */ .self-org-summary .badge.badge-disabled { background: rgba(240, 96, 112, 0.12); color: #f06070; border: 1px solid rgba(240, 96, 112, 0.35); } .self-org-summary .badge.badge-active { background: rgba(64, 224, 168, 0.12); color: #40e0a8; border: 1px solid rgba(64, 224, 168, 0.35); } /* Provenance badges (Phase 16): LIVE / SNAPSHOT / CONFIG / RESEARCH / TEST */ .provenance-badge { display: inline-block; font-size: 0.6rem; padding: 1px 6px; border-radius: var(--radius-pill); font-weight: 600; letter-spacing: 0.04em; margin-left: 6px; vertical-align: middle; } .provenance-badge[data-src="LIVE"] { background: rgba(64,224,168,0.15); color:#40e0a8; } .provenance-badge[data-src="SNAPSHOT"] { background: rgba(120,180,255,0.15); color:#78b4ff; } .provenance-badge[data-src="JOURNAL"] { background: rgba(200,160,255,0.15); color:#c8a0ff; } .provenance-badge[data-src="CHECKPOINT"]{ background: rgba(255,200,120,0.15); color:#ffc878; } .provenance-badge[data-src="CONFIG"] { background: rgba(255,255,255,0.08); color:#aab4cc; } .provenance-badge[data-src="RESEARCH"] { background: rgba(255,160,200,0.15); color:#ffa0c8; } .provenance-badge[data-src="TEST"] { background: rgba(255,220,120,0.15); color:#ffdc78; } /* Inspect tab (Phase 8/9) */ .inspect-table { width: 100%; border-collapse: collapse; font-size: 0.78rem; font-family: var(--font-mono, monospace); } .inspect-table th, .inspect-table td { padding: 4px 8px; text-align: right; border-bottom: 1px solid rgba(255,255,255,0.05); } .inspect-table th { text-align: center; color: #aab4cc; font-weight: 600; position: sticky; top: 0; background: rgba(20,24,40,0.95); } .inspect-table td:first-child, .inspect-table th:first-child { text-align: left; } .table-wrap { max-height: 420px; overflow: auto; border: 1px solid rgba(255,255,255,0.08); border-radius: 6px; } /* Integration status disabled/stale/pending states (Phase 14) */ .integration-item.int-disabled { opacity: 0.6; } .integration-item.int-stale { border-color: rgba(255,200,120,0.4); } .integration-item.int-pending { opacity: 0.7; } .gate-badge.stale { background: rgba(255,200,120,0.15); color: #ffc878; } .gate-badge.failed { background: rgba(240,96,112,0.15); color: #f06070; } .gate-item.gate-disabled { opacity: 0.55; } .gate-item.gate-disabled .gate-status { color: #8899bb; } .gate-item.gate-stale { border-color: rgba(255,200,120,0.4); } .gate-item.gate-stale .gate-status { color: #ffc878; } .gate-overall-row { margin-top: 12px; padding: 8px 0; } .badge-disabled { background: rgba(240,96,112,0.12) !important; color: #f06070 !important; } .badge-active { background: rgba(64,224,168,0.12) !important; color: #40e0a8 !important; } .self-org-controls { display: grid; gap: 10px; padding: 12px 0 4px; } .self-org-row { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; } .switch-line { display: flex; align-items: center; gap: 10px; font-size: 0.82rem; cursor: pointer; padding: 4px 0; } .switch-line input[type="checkbox"] { appearance: none; width: 36px; height: 20px; border-radius: 10px; background: rgba(255, 255, 255, 0.15); border: 1px solid rgba(255, 255, 255, 0.1); cursor: pointer; position: relative; flex-shrink: 0; transition: background var(--transition-fast), border-color var(--transition-fast); } .switch-line input[type="checkbox"]:checked { background: var(--color-primary); border-color: var(--color-primary); } .switch-line input[type="checkbox"]::after { content: ''; position: absolute; top: 2px; left: 2px; width: 14px; height: 14px; border-radius: 50%; background: white; transition: transform var(--transition-fast); } .switch-line input[type="checkbox"]:checked::after { transform: translateX(16px); } .switch-line input[type="checkbox"]:focus-visible { outline: 2px solid var(--color-primary); outline-offset: 2px; } .switch-line__label { font-weight: 500; color: #d0d8e8; } .switch-line__help { font-size: 0.7rem; opacity: 0.5; margin-left: 4px; } .proposal-line { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; padding: 8px 12px; border-radius: var(--radius-small); background: rgba(255, 255, 255, 0.03); border: 1px solid rgba(255, 255, 255, 0.05); } .proposal-label { font-size: 0.75rem; text-transform: uppercase; letter-spacing: 0.04em; opacity: 0.5; font-weight: 500; } .proposal-line strong { font-family: var(--font-mono); font-weight: 500; color: #c8d0e0; font-size: 0.85rem; } .proposal-time { font-size: 0.7rem; opacity: 0.4; margin-left: auto; font-family: var(--font-mono); } .proposal-actions { display: flex; gap: 8px; flex-wrap: wrap; margin-top: 4px; } /* Control Message */ .control-message { display: block; min-height: 1.5em; margin-top: 12px; padding: 8px 14px; border-radius: var(--radius-small); font-size: 0.82rem; font-family: var(--font-mono); background: rgba(255, 255, 255, 0.03); border: 1px solid rgba(255, 255, 255, 0.04); transition: background var(--transition-fast), border-color var(--transition-fast), color var(--transition-fast); color: #8899bb; } .control-message[data-kind="info"] { border-color: rgba(74, 124, 247, 0.2); color: #7aabff; } .control-message[data-kind="error"] { border-color: rgba(220, 70, 70, 0.3); background: rgba(220, 70, 70, 0.06); color: #f07080; } .control-message[data-kind="success"] { border-color: rgba(36, 180, 110, 0.2); color: var(--color-success); } /* ============================================================================ OPERATOR CONSOLE ============================================================================ */ .operator-console { border: 1px solid var(--line); border-radius: var(--radius-card); padding: 20px 24px; background: rgba(12, 18, 28, 0.92); box-shadow: var(--shadow-card); backdrop-filter: blur(8px); margin-bottom: 16px; } .console-header { display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; flex-wrap: wrap; margin-bottom: 16px; } .console-title-group h2 { margin: 0; font-size: 1.15rem; font-weight: 600; } .console-subtitle { margin: 2px 0 0; font-size: 0.82rem; opacity: 0.65; color: var(--muted); } .console-status-group { display: flex; align-items: center; gap: 12px; flex-shrink: 0; } /* Console Status Badge */ .status-badge { display: inline-flex; align-items: center; gap: 6px; padding: 4px 14px; border-radius: var(--radius-pill); font-weight: 600; font-size: 0.72rem; text-transform: uppercase; letter-spacing: 0.06em; background: rgba(120, 140, 170, 0.12); color: #8899bb; transition: background var(--transition-fast), color var(--transition-fast); } .status-badge::before { content: ''; display: inline-block; width: 7px; height: 7px; border-radius: 50%; background: currentColor; opacity: 0.6; } .status-badge.status-running { background: rgba(36, 180, 110, 0.2); color: #4ddb8a; } .status-badge.status-running::before { animation: pulse-running 1.2s ease-in-out infinite; } .status-badge.status-paused { background: rgba(230, 170, 40, 0.2); color: #f0c040; } .status-badge.status-stopped, .status-badge.status-faulted { background: rgba(220, 70, 70, 0.2); color: #f06070; } .status-badge.status-idle { background: rgba(120, 140, 170, 0.1); color: #8899bb; } .tick-display { font-family: var(--font-mono); font-weight: 600; font-size: 1.1rem; color: #c8d0e0; padding: 2px 12px; background: rgba(255, 255, 255, 0.05); border-radius: var(--radius-small); border: 1px solid rgba(255, 255, 255, 0.06); } /* Console Metrics */ .console-metrics { display: flex; gap: 16px; flex-wrap: wrap; padding: 10px 14px; margin-bottom: 16px; background: rgba(255, 255, 255, 0.03); border-radius: var(--radius-medium); border: 1px solid rgba(255, 255, 255, 0.04); } .console-metrics .metric { display: flex; align-items: center; gap: 6px; font-size: 0.85rem; color: #b0bcd0; background: transparent; border: none; padding: 0; box-shadow: none; } .console-metrics .metric span:last-child { font-weight: 600; color: var(--text); font-family: var(--font-mono); min-width: 40px; } .loop-size-hint { font-size: 0.75rem; color: var(--muted); margin-left: 8px; align-self: center; } /* Console Controls */ .console-controls { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 12px; margin-bottom: 16px; } /* Proposals Section */ .proposals-section { margin: 12px 0 14px; border: 1px solid rgba(255, 255, 255, 0.06); border-radius: var(--radius-small); padding: 0 12px; transition: border-color var(--transition-fast); } .proposals-section:hover { border-color: rgba(255, 255, 255, 0.12); } .proposals-summary { display: flex; align-items: center; justify-content: space-between; cursor: pointer; padding: 10px 0; user-select: none; list-style: none; gap: 12px; } .proposals-summary::-webkit-details-marker { display: none; } .proposals-title { font-weight: 500; color: #c8d0e0; font-size: 0.85rem; } .proposals-summary .badge { font-size: 0.68rem; padding: 2px 12px; border-radius: var(--radius-pill); background: rgba(255, 255, 255, 0.06); color: #8899bb; font-weight: 500; } .proposals-summary .badge.has-proposals { background: rgba(74, 124, 247, 0.18); color: var(--color-primary); } .proposals-summary .badge.has-proposals::after { content: ' ●'; color: var(--color-primary); animation: pulse-dot 1.5s ease-in-out infinite; } @keyframes pulse-dot { 0%, 100% { opacity: 0.5; } 50% { opacity: 1; } } /* Proposals List */ .proposals-list { padding: 4px 0 12px; } .proposal-empty { padding: 16px 12px; text-align: center; color: #555; font-size: 0.85rem; font-style: italic; } .proposal-item { display: flex; align-items: center; gap: 12px; padding: 10px 14px; margin-bottom: 6px; border: 1px solid rgba(255, 255, 255, 0.06); border-radius: var(--radius-small); background: rgba(255, 255, 255, 0.02); transition: background var(--transition-fast), border-color var(--transition-fast); flex-wrap: wrap; } .proposal-item:hover { background: rgba(255, 255, 255, 0.05); border-color: rgba(255, 255, 255, 0.12); } .proposal-item:last-child { margin-bottom: 0; } .proposal-kind { font-size: 0.7rem; font-weight: 600; text-transform: uppercase; letter-spacing: 0.04em; padding: 2px 10px; border-radius: var(--radius-pill); background: rgba(255, 255, 255, 0.06); color: #8899bb; white-space: nowrap; } .proposal-desc { font-family: var(--font-mono); font-size: 0.82rem; color: #c8d0e0; white-space: nowrap; } .proposal-conf { font-size: 0.75rem; font-weight: 600; padding: 2px 10px; border-radius: var(--radius-pill); background: rgba(255, 255, 255, 0.04); color: #4ddb8a; min-width: 50px; text-align: center; } .proposal-conf[data-level="low"] { color: #f06070; background: rgba(220, 70, 70, 0.12); } .proposal-conf[data-level="medium"] { color: #f0c040; background: rgba(230, 170, 40, 0.12); } .proposal-conf[data-level="high"] { color: #4ddb8a; background: rgba(36, 180, 110, 0.12); } .proposal-reason { font-size: 0.75rem; opacity: 0.5; flex: 1; min-width: 100px; } .btn-approve, .btn-reject { min-height: 28px; padding: 3px 12px; border: none; border-radius: var(--radius-small); cursor: pointer; font-weight: 500; font-size: 0.7rem; font-family: var(--font-family); transition: background var(--transition-fast), transform var(--transition-fast); } .btn-approve { background: rgba(36, 180, 110, 0.15); color: var(--color-success); } .btn-approve:hover { background: rgba(36, 180, 110, 0.25); transform: translateY(-1px); } .btn-reject { background: rgba(220, 70, 70, 0.15); color: var(--color-danger); } .btn-reject:hover { background: rgba(220, 70, 70, 0.25); transform: translateY(-1px); } /* ============================================================================ CONSOLE OUTPUT ============================================================================ */ .console-output-wrapper { margin-top: 8px; } .console-output-header { display: flex; align-items: center; justify-content: space-between; padding: 6px 0 4px; border-bottom: 1px solid rgba(255, 255, 255, 0.04); } .console-output-title { font-size: 0.78rem; font-weight: 500; color: #c8d0e0; } .console-output-hint { font-size: 0.65rem; opacity: 0.35; font-family: var(--font-mono); } .console-output { max-height: 200px; overflow-y: auto; padding: 8px 12px; background: rgba(0, 0, 0, 0.3); border-radius: var(--radius-small); font-family: var(--font-mono); font-size: 0.78rem; line-height: 1.6; scroll-behavior: smooth; } .console-output::-webkit-scrollbar { width: 6px; } .console-output::-webkit-scrollbar-track { background: rgba(255, 255, 255, 0.02); border-radius: 3px; } .console-output::-webkit-scrollbar-thumb { background: rgba(255, 255, 255, 0.12); border-radius: 3px; } .console-output::-webkit-scrollbar-thumb:hover { background: rgba(255, 255, 255, 0.2); } .log-entry { padding: 1px 0; opacity: 0.9; } .log-entry .log-time { color: #445566; margin-right: 8px; font-size: 0.7rem; } .log-entry.log-info { color: #7aabff; } .log-entry.log-success { color: #4ddb8a; } .log-entry.log-error { color: #f06070; } .log-entry.log-warning { color: #f0c040; } .log-entry.log-debug { color: #8899bb; opacity: 0.6; } /* ============================================================================ OPERATOR NOTE ============================================================================ */ .operator-note { margin-top: 12px; padding: 8px 14px; border-radius: var(--radius-small); font-size: 0.78rem; opacity: 0.7; background: rgba(220, 70, 70, 0.05); border: 1px solid rgba(220, 70, 70, 0.08); color: #b0bcd0; line-height: 1.5; } /* ============================================================================ ICONS ============================================================================ */ .icon { font-size: 0.85em; line-height: 1; } /* Accessibility mode */ body.accessibility-mode { --font-family: Inter, ui-sans-serif, system-ui, sans-serif; } body.accessibility-mode, body.accessibility-mode .card, body.accessibility-mode .control-card, body.accessibility-mode .topbar, body.accessibility-mode .site-footer { border-width: 1.5px; } body.accessibility-mode .tab-btn { font-size: 1rem; padding: 12px 24px; } body.accessibility-mode .metric strong { font-size: 24px; } body.accessibility-mode .metric span, body.accessibility-mode .panel-title h2 { font-size: 0.95rem; } body.accessibility-mode .icon-btn, body.accessibility-mode .mode-btn, body.accessibility-mode .health-bar { min-height: 36px; min-width: 36px; } /* ============================================================================ RESPONSIVE DESIGN ============================================================================ */ /* Large screens */ @media (max-width: 1300px) { .detail-grid { grid-template-columns: repeat(2, minmax(260px, 1fr)); } .control-grid { grid-template-columns: repeat(2, 1fr); } } /* Medium screens */ @media (max-width: 1100px) { .metrics-grid { grid-template-columns: repeat(3, 1fr); } .detail-grid { grid-template-columns: 1fr; } .roadmap-grid { grid-template-columns: repeat(2, 1fr); } .console-controls { grid-template-columns: 1fr 1fr; } .runtime-metrics { grid-template-columns: repeat(2, 1fr); } } /* Tablets */ @media (max-width: 900px) { .topbar, main { padding-left: 20px; padding-right: 20px; } .control-card { padding: 16px 18px; } .operator-console { padding: 16px 18px; } .control-grid { grid-template-columns: 1fr 1fr; } .doc-browser { flex-direction: column; max-height: none; min-height: auto; } .doc-sidebar { flex: none; border-right: none; border-bottom: 1px solid rgba(255, 255, 255, 0.06); padding-bottom: 15px; max-height: 300px; } .doc-viewer { min-height: 300px; } .self-org-row { grid-template-columns: 1fr; gap: 4px; } } /* Mobile */ @media (max-width: 640px) { .topbar, main { padding-left: 14px; padding-right: 14px; } .topbar { flex-direction: column; align-items: flex-start; gap: 10px; padding: 16px 14px; } .metrics-grid { grid-template-columns: repeat(2, 1fr); } #tab-overview .metrics-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } #tab-overview .detail-grid { grid-template-columns: minmax(0, 1fr); } .roadmap-grid { grid-template-columns: 1fr; } .control-card { padding: 14px; border-radius: 12px; } .control-card__header { flex-direction: column; align-items: stretch; gap: 10px; } .runtime-state { align-self: flex-start; } .control-grid { grid-template-columns: 1fr; gap: 8px; } .control-group__body { flex-wrap: wrap; } .control-group__body .input-label { min-width: 100%; } .actions-row button { flex: 1; min-width: 0; font-size: 0.7rem; padding: 4px 8px; min-height: 30px; } .console-controls { grid-template-columns: 1fr; gap: 8px; } .console-header { flex-direction: column; align-items: stretch; } .console-status-group { justify-content: flex-start; } .console-metrics { gap: 10px; padding: 8px 12px; flex-wrap: wrap; } .console-metrics .metric { font-size: 0.75rem; } .runtime-metrics { grid-template-columns: 1fr 1fr; gap: 6px; } .runtime-metrics .metric-item { padding: 6px 10px; } .metric-value { font-size: 0.95rem; } .shortcut-hint, .shortcut-hint-inline { display: none; } .proposal-item { flex-direction: column; align-items: stretch; gap: 6px; } .proposal-actions { margin-left: 0; justify-content: flex-start; } .proposal-kind, .proposal-desc, .proposal-conf, .proposal-reason { white-space: normal; } .console-output { max-height: 150px; font-size: 0.72rem; } .doc-sidebar { max-height: 200px; } .doc-toolbar { flex-direction: column; } .doc-toolbar input[type="text"] { min-width: auto; } .operator-note { font-size: 0.72rem; } .proposal-line { flex-direction: column; align-items: flex-start; } .proposal-time { margin-left: 0; } .button-group { flex-wrap: wrap; } #heatmap { height: 250px; } } /* Very small screens */ @media (max-width: 380px) { .topbar, main { padding-left: 10px; padding-right: 10px; } .control-card { padding: 10px; } .operator-console { padding: 10px; } .runtime-metrics { grid-template-columns: 1fr 1fr; } .control-group { padding: 8px 10px; } .actions-row button { font-size: 0.65rem; padding: 3px 6px; min-height: 26px; } .metrics-grid { grid-template-columns: 1fr 1fr; gap: 8px; } .metric { padding: 12px; } .metric strong { font-size: 20px; } .panel { padding: 14px; } #heatmap { height: 180px; } } /* ============================================================================ INTEGRATION STATUS (Dashboard tab) ============================================================================ */ .integration-status { padding: 18px; margin-top: 14px; } .integration-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(140px, 1fr)); gap: 10px; margin-top: 12px; } .integration-item { padding: 10px 14px; border-radius: 8px; border: 1px solid var(--line); background: rgba(255, 255, 255, 0.02); font-size: 0.85rem; text-align: center; transition: all var(--transition-medium); } .integration-item.int-passed { border-color: rgba(80, 220, 120, 0.5); background: rgba(80, 220, 120, 0.08); color: #50dc78; } .integration-item.int-failed { border-color: rgba(240, 96, 112, 0.5); background: rgba(240, 96, 112, 0.08); color: #f06070; } .gate-badge { padding: 4px 12px; border-radius: 12px; font-size: 0.8rem; font-weight: 600; } .gate-badge.passed { background: rgba(80, 220, 120, 0.15); color: #50dc78; } .gate-badge.pending { background: rgba(255, 200, 80, 0.15); color: #ffc850; } .gate-board { max-width: 900px; margin: 0 auto; } .gate-header { margin-bottom: 20px; } .gate-header h2 { margin: 0 0 6px 0; } .gate-subtitle { color: var(--muted); font-size: 0.9rem; margin: 0 0 12px 0; } .gate-rule { display: block; margin-top: 6px; color: #ffc850; font-weight: 600; } .gate-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 12px; margin-bottom: 24px; } .gate-item { display: flex; align-items: flex-start; gap: 12px; padding: 14px 16px; border-radius: var(--radius-card); border: 1px solid var(--line); background: rgba(10, 25, 37, 0.6); transition: all var(--transition-medium); } .gate-item.gate-passed { border-color: rgba(80, 220, 120, 0.5); background: rgba(80, 220, 120, 0.06); } .gate-item.gate-failed { border-color: rgba(240, 96, 112, 0.5); background: rgba(240, 96, 112, 0.06); } .gate-item.gate-pending { border-color: rgba(255, 200, 80, 0.3); background: rgba(255, 200, 80, 0.04); } .gate-status { font-size: 1.4rem; flex-shrink: 0; } .gate-label strong { display: block; font-size: 0.9rem; margin-bottom: 2px; } .gate-label span { font-size: 0.78rem; color: var(--muted); } .gate-roadmap { margin-top: 24px; } .gate-roadmap h3 { font-size: 1rem; margin-bottom: 12px; } .gate-checklist { list-style: none; padding: 0; margin: 0; display: grid; grid-template-columns: repeat(auto-fit, minmax(320px, 1fr)); gap: 6px; } .gate-checklist li { padding: 8px 12px; border-radius: 6px; font-size: 0.85rem; } .gate-todo { color: var(--muted); background: rgba(255, 255, 255, 0.02); } .gate-done { color: #50dc78; background: rgba(80, 220, 120, 0.05); } /* ============================================================================ UNIFIED FILE MANAGER (Research + Docs) ============================================================================ */ /* Toolbar */ .fm-toolbar { display: flex; align-items: center; gap: 16px; margin-bottom: 16px; padding: 10px 16px; background: rgba(10, 25, 37, 0.5); border: 1px solid var(--line); border-radius: var(--radius-card); flex-wrap: wrap; } .fm-source-selector { display: flex; gap: 4px; background: rgba(0, 0, 0, 0.25); border-radius: var(--radius-small); padding: 3px; } .fm-source-btn { padding: 6px 16px; border: none; border-radius: var(--radius-small); background: transparent; color: var(--muted); cursor: pointer; font-family: var(--font-family); font-size: 0.85rem; font-weight: 500; transition: all var(--transition-fast); } .fm-source-btn:hover { color: var(--text); background: rgba(255, 255, 255, 0.05); } .fm-source-btn.active { background: var(--color-primary); color: #fff; } .fm-experiment-sort { display: flex; align-items: center; gap: 6px; color: var(--muted); font-size: 0.8rem; white-space: nowrap; } .fm-experiment-sort select { min-width: 9.5rem; padding: 6px 8px; border: 1px solid rgba(255, 255, 255, 0.1); border-radius: var(--radius-small); background: rgba(0, 0, 0, 0.25); color: var(--text); font: inherit; } .fm-experiment-sort select:disabled { opacity: 0.5; } .fm-search-bar { display: flex; gap: 6px; flex: 1; min-width: 150px; max-width: 400px; } .fm-search-bar input[type="text"] { flex: 1; padding: 6px 12px; border: 1px solid rgba(255, 255, 255, 0.1); border-radius: var(--radius-small); background: rgba(0, 0, 0, 0.25); color: var(--text); font-family: var(--font-family); font-size: 0.85rem; } .fm-search-bar input[type="text"]:focus { outline: none; border-color: var(--color-primary); box-shadow: var(--shadow-focus); } .fm-search-bar button { padding: 6px 12px; background: rgba(74, 124, 247, 0.15); color: #7aabff; border: none; border-radius: var(--radius-small); cursor: pointer; font-family: var(--font-family); font-size: 0.85rem; transition: background var(--transition-fast); } .fm-search-bar button:hover { background: rgba(74, 124, 247, 0.25); } .fm-stats { font-size: 0.8rem; color: var(--muted); white-space: nowrap; } /* Main layout */ .fm-layout { display: flex; gap: 16px; min-height: 550px; max-height: 75vh; } /* Sidebar */ .fm-sidebar { flex: 0 0 340px; background: rgba(10, 25, 37, 0.6); border: 1px solid var(--line); border-radius: var(--radius-card); display: flex; flex-direction: column; overflow: hidden; } .fm-sidebar-header { display: flex; justify-content: space-between; align-items: center; padding: 12px 16px; border-bottom: 1px solid var(--line); } .fm-sidebar-title { font-size: 0.9rem; font-weight: 600; color: var(--text); } .fm-refresh-btn { background: none; border: none; color: var(--muted); cursor: pointer; font-size: 1rem; padding: 2px 6px; border-radius: 4px; transition: all var(--transition-fast); } .fm-refresh-btn:hover { color: var(--text); background: rgba(255, 255, 255, 0.06); } .fm-tree { flex: 1; overflow-y: auto; padding: 8px; font-size: 0.85rem; } .fm-tree-list { list-style: none; padding: 0; margin: 0; } .fm-tree-item { padding: 2px 0; } .fm-tree-dir { margin: 2px 0; } .fm-dir-toggle { display: inline-block; width: 16px; font-size: 0.7rem; color: var(--muted); cursor: pointer; user-select: none; transition: transform 0.15s; } .fm-dir-label { cursor: pointer; color: var(--text); font-weight: 500; font-size: 0.85rem; } .fm-dir-label:hover { color: #7aabff; } .fm-dir-children { padding-left: 20px; } .fm-tree-file { cursor: pointer; padding: 3px 0 3px 16px; border-radius: 4px; transition: background var(--transition-fast); } .fm-tree-file:hover { background: rgba(255, 255, 255, 0.05); } .fm-file-label { cursor: pointer; color: var(--muted); font-size: 0.85rem; } .fm-file-label:hover { color: var(--text); } .fm-file-size { font-size: 0.7rem; color: #555; margin-left: 8px; } .fm-search-result { padding: 6px 10px; border-radius: 4px; cursor: pointer; display: flex; align-items: center; gap: 8px; transition: background var(--transition-fast); } .fm-search-result:hover { background: rgba(255, 255, 255, 0.05); } .fm-file-icon { font-size: 1rem; } .fm-file-name { flex: 1; color: var(--text); } .fm-loading { color: var(--muted); font-style: italic; padding: 16px; display: block; text-align: center; } .fm-empty { color: var(--muted); font-style: italic; padding: 24px; text-align: center; } .fm-no-results { padding: 24px; text-align: center; color: #555; } /* Viewer */ .fm-viewer { flex: 1; background: rgba(10, 25, 37, 0.95); border: 1px solid var(--accent); border-radius: var(--radius-card); padding: 20px; overflow-y: auto; min-height: 550px; transition: opacity 0.2s ease, transform 0.2s ease; z-index: 10; } /* Hidden state: overlay viewer collapses so sidebar fills space */ .fm-viewer-hidden { display: none; } /* When viewer is hidden, sidebar takes full width */ .fm-layout:has(.fm-viewer-hidden) .fm-sidebar { flex: 1; } .fm-placeholder { display: flex; flex-direction: column; align-items: center; justify-content: center; height: 100%; color: var(--muted); text-align: center; padding: 40px 20px; } .fm-placeholder p { margin: 8px 0; } .fm-hint { font-size: 0.8rem; color: #555; } .fm-file-header { display: flex; justify-content: space-between; align-items: center; border-bottom: 1px solid var(--line); padding-bottom: 12px; margin-bottom: 16px; gap: 12px; } .fm-close-viewer-btn { background: none; border: none; color: var(--muted); cursor: pointer; font-size: 1.1rem; padding: 4px 8px; border-radius: 4px; transition: all 0.15s ease; line-height: 1; } .fm-close-viewer-btn:hover { color: var(--danger); background: rgba(255, 93, 115, 0.1); } .fm-file-header h3 { margin: 0; font-size: 1.05rem; font-weight: 600; } .fm-file-meta { font-size: 0.8rem; color: var(--muted); } .fm-error { color: #f06070; padding: 20px; text-align: center; } /* Image viewer */ .fm-image-container { display: flex; justify-content: center; align-items: center; padding: 16px; min-height: 200px; } .fm-image { max-width: 100%; max-height: 70vh; border-radius: 8px; box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3); object-fit: contain; } /* Video viewer */ .fm-video-container { display: flex; justify-content: center; padding: 16px; } .fm-video { max-width: 100%; max-height: 70vh; border-radius: 8px; box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3); } /* Audio viewer */ .fm-audio-container { display: flex; justify-content: center; padding: 24px 16px; } .fm-audio { width: 100%; max-width: 600px; border-radius: 8px; } /* PDF viewer */ .fm-pdf-container { display: flex; justify-content: center; padding: 16px; min-height: 500px; } .fm-pdf-frame { width: 100%; height: 70vh; border: none; border-radius: 8px; box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3); background: #fff; } /* Spreadsheet viewer */ .fm-sheet-tabs { display: flex; gap: 4px; padding: 8px 12px 0; border-bottom: 1px solid var(--border-color); background: rgba(0, 0, 0, 0.15); } .fm-sheet-tab { padding: 6px 14px; border: 1px solid var(--border-color); border-bottom: none; border-radius: 6px 6px 0 0; background: rgba(255, 255, 255, 0.05); color: var(--text-secondary); cursor: pointer; font-size: 0.85rem; } .fm-sheet-tab.active { background: var(--card-bg); color: var(--text-primary); font-weight: 600; } .fm-sheet-viewer { padding: 12px; overflow: auto; max-height: 60vh; } .fm-spreadsheet-table { width: 100%; border-collapse: collapse; font-size: 0.85rem; background: var(--card-bg); } .fm-spreadsheet-table th, .fm-spreadsheet-table td { border: 1px solid var(--border-color); padding: 6px 10px; text-align: left; white-space: nowrap; } .fm-spreadsheet-table th { background: rgba(255, 255, 255, 0.08); font-weight: 600; position: sticky; top: 0; } .fm-spreadsheet-table tr:nth-child(even) { background: rgba(255, 255, 255, 0.03); } /* DOCX viewer */ .fm-docx-viewer { padding: 16px; overflow: auto; max-height: 70vh; } .fm-docx-content { background: #fff; color: #1f2328; padding: 32px; border-radius: 8px; box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3); line-height: 1.6; } .fm-docx-content h1, .fm-docx-content h2, .fm-docx-content h3, .fm-docx-content h4 { color: #1f2328; margin-top: 1.2em; margin-bottom: 0.5em; } .fm-docx-content p { margin: 0.5em 0; } .fm-docx-content table { border-collapse: collapse; width: 100%; margin: 1em 0; } .fm-docx-content td, .fm-docx-content th { border: 1px solid #d0d7de; padding: 6px 10px; } .fm-docx-messages { margin-top: 12px; padding: 8px 12px; background: rgba(255, 193, 7, 0.15); border-radius: 6px; color: var(--text-secondary); font-size: 0.8rem; } /* In-place text/code editor */ .fm-editor-wrapper { padding: 12px; display: flex; flex-direction: column; min-height: 300px; } .fm-editor-split { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; min-height: 400px; } .fm-editor-pane { display: flex; flex-direction: column; min-height: 0; } .fm-editor-textarea { width: 100%; min-height: 300px; flex: 1; padding: 12px; border: 1px solid var(--border-color); border-radius: 8px; background: var(--bg-secondary); color: var(--text-primary); font-family: var(--font-mono); font-size: 0.85rem; line-height: 1.5; resize: vertical; outline: none; } .fm-editor-textarea:focus { border-color: var(--accent); box-shadow: 0 0 0 2px rgba(74, 124, 247, 0.2); } .fm-editor-preview { overflow: auto; max-height: 70vh; padding: 16px; border: 1px solid var(--border-color); border-radius: 8px; background: var(--card-bg); } .fm-editor-status { padding: 8px 12px; min-height: 32px; font-size: 0.85rem; } .fm-editor-status.success { color: #7ee787; } .fm-editor-status.error { color: #f85149; } .fm-file-edit-btn, .fm-file-save-btn, .fm-file-cancel-btn, .fm-file-action-btn { padding: 4px 10px; border: 1px solid var(--border-color); border-radius: 6px; background: rgba(255, 255, 255, 0.05); color: var(--text-secondary); cursor: pointer; font-size: 0.8rem; transition: all var(--transition-fast); } .fm-file-edit-btn:hover, .fm-file-action-btn:hover { background: rgba(74, 124, 247, 0.15); color: #7aabff; } .fm-file-save-btn { background: rgba(46, 160, 67, 0.15); color: #7ee787; border-color: rgba(46, 160, 67, 0.3); } .fm-file-save-btn:hover:not(:disabled) { background: rgba(46, 160, 67, 0.25); } .fm-file-save-btn:disabled { opacity: 0.6; cursor: wait; } .fm-file-cancel-btn:hover { background: rgba(248, 81, 73, 0.15); color: #f85149; } /* Diff viewer */ .fm-editor-diff { margin: 0 12px 12px; border: 1px solid var(--border-color); border-radius: 8px; overflow: auto; max-height: 300px; background: rgba(0, 0, 0, 0.2); } .fm-diff-empty { padding: 16px; text-align: center; color: var(--text-secondary); } .fm-diff-table { width: 100%; border-collapse: collapse; font-family: var(--font-mono); font-size: 0.8rem; line-height: 1.5; } .fm-diff-table td { padding: 2px 8px; white-space: pre-wrap; } .fm-diff-sign { width: 24px; text-align: center; user-select: none; } .fm-diff-add { background: rgba(46, 160, 67, 0.12); } .fm-diff-add .fm-diff-sign { color: #7ee787; } .fm-diff-del { background: rgba(248, 81, 73, 0.12); } .fm-diff-del .fm-diff-sign { color: #f85149; } .fm-diff-ctx { color: var(--text-secondary); } /* BibTeX form editor */ .bibtex-edit-toolbar { display: flex; align-items: center; gap: 12px; padding: 12px 16px; border-bottom: 1px solid var(--line); } .bibtex-edit-save-btn { padding: 6px 14px; border: 1px solid rgba(46, 160, 67, 0.4); border-radius: 6px; background: rgba(46, 160, 67, 0.15); color: #7ee787; cursor: pointer; font-size: 0.85rem; } .bibtex-edit-save-btn:hover:not(:disabled) { background: rgba(46, 160, 67, 0.25); } .bibtex-edit-save-btn:disabled { opacity: 0.6; cursor: wait; } .bibtex-edit-status { font-size: 0.85rem; } .bibtex-edit-status.success { color: #7ee787; } .bibtex-edit-status.error { color: #f85149; } .bibtex-edit-form { padding: 12px 16px; max-height: 60vh; overflow: auto; } .bibtex-edit-entry { margin-bottom: 16px; border: 1px solid var(--line); border-radius: 8px; padding: 12px; } .bibtex-edit-entry legend { padding: 0 8px; font-weight: 600; color: var(--text-primary); } .bibtex-edit-fields { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 10px; } .bibtex-edit-label { display: flex; flex-direction: column; gap: 4px; font-size: 0.8rem; color: var(--text-secondary); } .bibtex-edit-label span { text-transform: capitalize; } .bibtex-edit-label input, .bibtex-edit-label select { padding: 6px 8px; border: 1px solid var(--border-color); border-radius: 4px; background: var(--bg-secondary); color: var(--text-primary); font-family: var(--font-family); font-size: 0.85rem; } .bibtex-edit-label input:focus, .bibtex-edit-label select:focus { outline: none; border-color: var(--accent); } .bibtex-edit-empty { padding: 24px; text-align: center; color: var(--text-secondary); } /* Jupyter Notebook viewer */ .fm-notebook { padding: 16px; background: var(--bg-secondary); } .fm-notebook-cell { margin-bottom: 16px; border: 1px solid var(--border-color); border-radius: 8px; overflow: hidden; background: var(--card-bg); } .fm-notebook-cell-label { padding: 4px 10px; background: rgba(255, 255, 255, 0.05); color: var(--text-secondary); font-size: 0.75rem; font-family: var(--font-mono); text-transform: uppercase; } .fm-notebook-source { margin: 0; padding: 12px; } .fm-notebook-source pre { margin: 0; white-space: pre-wrap; word-break: break-word; } .fm-notebook-outputs { border-top: 1px solid var(--border-color); background: rgba(0, 0, 0, 0.15); } .fm-notebook-output { padding: 10px 12px; border-bottom: 1px solid var(--border-color); } .fm-notebook-output:last-child { border-bottom: none; } .fm-notebook-output pre { margin: 0; white-space: pre-wrap; word-break: break-word; font-size: 0.8rem; } .fm-notebook-output-error { color: #f85149; padding: 8px; background: rgba(248, 81, 73, 0.08); border-radius: 4px; } .fm-notebook-output-image { max-width: 100%; border-radius: 4px; } /* Log file viewer */ .fm-log-viewer { padding: 12px; font-family: var(--font-mono); font-size: 0.8rem; line-height: 1.5; max-height: 65vh; overflow: auto; background: rgba(0, 0, 0, 0.2); } .fm-log-line { display: flex; gap: 12px; padding: 2px 0; border-bottom: 1px solid rgba(255, 255, 255, 0.03); } .fm-log-line-num { min-width: 48px; text-align: right; color: var(--text-secondary); user-select: none; } .fm-log-line-text { white-space: pre-wrap; word-break: break-word; } .fm-log-level-default .fm-log-line-text { color: var(--text-primary); } .fm-log-level-debug .fm-log-line-text { color: #9aa0a6; } .fm-log-level-info .fm-log-line-text { color: #79c0ff; } .fm-log-level-warning .fm-log-line-text { color: #e6aa28; } .fm-log-level-error .fm-log-line-text { color: #f85149; } .fm-log-level-critical .fm-log-line-text { color: #ff7b72; font-weight: 600; } .fm-log-filter-btn.active { opacity: 0.4; } /* Diagram viewers (Graphviz / PlantUML) */ .fm-diagram-viewer { display: flex; justify-content: center; padding: 16px; min-height: 400px; } .fm-diagram-container { width: 100%; } .fm-diagram-image { max-width: 100%; border-radius: 8px; background: #fff; padding: 8px; } /* Code viewer */ .fm-code { background: rgba(0, 0, 0, 0.35); padding: 14px; border-radius: var(--radius-small); overflow-x: auto; font-family: var(--font-mono); font-size: 0.82rem; line-height: 1.5; white-space: pre-wrap; word-wrap: break-word; border: 1px solid rgba(255, 255, 255, 0.04); margin: 0; } .fm-code-block { margin: 12px 0; border-left: 3px solid var(--color-primary); border-radius: 0 var(--radius-small) var(--radius-small) 0; } .fm-code-lang { display: inline-block; padding: 2px 10px; margin-bottom: -1px; background: rgba(74, 124, 247, 0.15); color: #7aabff; font-family: var(--font-mono); font-size: 0.7rem; border-radius: 4px 4px 0 0; letter-spacing: 0.5px; text-transform: uppercase; position: relative; z-index: 1; } .fm-code-wrapper .fm-code-block { margin-top: 0; border-top-left-radius: 0; } .fm-inline-code { background: rgba(0, 0, 0, 0.3); padding: 2px 8px; border-radius: 4px; font-family: var(--font-mono); font-size: 0.85em; color: #7aabff; } .fm-text { background: rgba(0, 0, 0, 0.15); padding: 14px; border-radius: var(--radius-small); font-family: var(--font-mono); font-size: 0.82rem; line-height: 1.5; white-space: pre-wrap; word-wrap: break-word; margin: 0; } /* YAML syntax highlighting */ .fm-yaml { font-size: 0.82rem; line-height: 1.6; } .fm-yaml .fm-yaml-comment { color: #6a9955; font-style: italic; } .fm-yaml .fm-yaml-key { color: #569cd6; font-weight: 600; } .fm-yaml .fm-yaml-bool { color: #569cd6; font-weight: 500; } .fm-yaml .fm-yaml-number { color: #b5cea8; } .fm-yaml .fm-yaml-string { color: #ce9178; } .fm-yaml .fm-yaml-null { color: #808080; font-style: italic; } .fm-yaml .fm-yaml-list-marker { color: #dcdcaa; font-weight: 700; } .fm-yaml .fm-yaml-anchor { color: #c586c0; } .fm-yaml .fm-yaml-alias { color: #c586c0; } .fm-yaml .fm-yaml-doc-sep { color: #808080; font-weight: 600; } .fm-yaml .fm-yaml-block-scalar { color: #dcdcaa; font-weight: 600; } /* ================================================================ Multi-language code syntax highlighting (VS Code Dark+ palette) ================================================================ */ .fm-code-hl { font-size: 0.82rem; line-height: 1.6; } /* Comments — green */ .fm-tk-comment { color: #6a9955; font-style: italic; } /* Keywords — blue */ .fm-tk-keyword { color: #569cd6; font-weight: 500; } /* Builtins / standard library — cyan */ .fm-tk-builtin { color: #4ec9b0; } /* Types — teal */ .fm-tk-type { color: #4ec9b0; font-style: italic; } /* Strings — orange */ .fm-tk-string { color: #ce9178; } /* Numbers — light green */ .fm-tk-number { color: #b5cea8; } /* Decorators / annotations — yellow-green */ .fm-tk-decorator { color: #dcdcaa; } /* f-string expressions — orange-red */ .fm-tk-fstring { color: #d16969; } /* HTML/XML tags — blue */ .fm-tk-tag { color: #569cd6; } /* HTML/XML attributes — light yellow */ .fm-tk-attr { color: #dcdcaa; } /* HTML entities — orange */ .fm-tk-entity { color: #ce9178; } /* CSS selectors — yellow */ .fm-tk-selector { color: #d7ba7d; } /* CSS properties — light blue */ .fm-tk-property { color: #9cdcfe; } /* CSS values — light green */ .fm-tk-value { color: #b5cea8; } /* !important — red */ .fm-tk-important { color: #f06070; font-weight: 700; } /* Variables — cyan */ .fm-tk-variable { color: #9cdcfe; } /* Section/table headers — yellow */ .fm-tk-section { color: #dcdcaa; font-weight: 600; } /* BibTeX entry types — blue */ .fm-tk-entry { color: #569cd6; font-weight: 600; } /* BibTeX fields — light blue */ .fm-tk-field { color: #9cdcfe; } /* Diff markers — red/green */ .fm-tk-diff { color: #d16969; } .fm-tk-diff:is(.fm-tk-add) { color: #6a9955; } /* Diff hunk headers — purple */ .fm-tk-hunk { color: #c586c0; } /* Labels — yellow */ .fm-tk-label { color: #dcdcaa; } /* Markdown rendering */ .fm-markdown { font-size: 0.92rem; line-height: 1.7; color: var(--text); max-width: 100%; overflow-wrap: break-word; } .fm-markdown h2, .fm-markdown h3, .fm-markdown h4 { margin: 24px 0 12px 0; color: var(--text); font-weight: 600; line-height: 1.3; } .fm-markdown h2 { font-size: 1.3rem; border-bottom: 1px solid var(--line); padding-bottom: 6px; } .fm-markdown h3 { font-size: 1.1rem; } .fm-markdown h4 { font-size: 1rem; } .fm-markdown p { margin: 10px 0; line-height: 1.7; } .fm-markdown a { color: #7aabff; text-decoration: none; border-bottom: 1px solid rgba(122, 171, 255, 0.2); transition: border-color var(--transition-fast); } .fm-markdown a:hover { text-decoration: none; border-bottom-color: #7aabff; } .fm-markdown img { max-width: 100%; border-radius: 8px; margin: 16px 0; box-shadow: 0 2px 12px rgba(0, 0, 0, 0.2); } .fm-markdown hr { border: none; border-top: 1px solid var(--line); margin: 20px 0; } .fm-markdown blockquote { border-left: 3px solid var(--color-primary); margin: 12px 0; padding: 8px 16px; background: rgba(74, 124, 247, 0.05); border-radius: 0 var(--radius-small) var(--radius-small) 0; color: var(--muted); } .fm-markdown ul, .fm-markdown ol { padding-left: 24px; margin: 8px 0; } .fm-markdown li { margin: 4px 0; } /* CSV table */ .fm-csv-table { width: 100%; border-collapse: collapse; font-size: 0.82rem; } .fm-csv-table th { background: rgba(74, 124, 247, 0.15); color: #7aabff; padding: 8px 12px; text-align: left; font-weight: 600; border: 1px solid var(--line); } .fm-csv-table td { padding: 6px 12px; border: 1px solid var(--line); color: var(--text); } .fm-csv-table tr:nth-child(even) { background: rgba(255, 255, 255, 0.02); } /* Markdown tables */ .fm-md-table { width: 100%; border-collapse: collapse; margin: 16px 0; font-size: 0.85rem; } .fm-md-table td { padding: 8px 14px; border: 1px solid var(--line); color: var(--text); vertical-align: top; } .fm-md-table tr:nth-child(even) { background: rgba(255, 255, 255, 0.02); } .fm-md-table tr:hover { background: rgba(74, 124, 247, 0.04); } .fm-csv-table tr:hover { background: rgba(255, 255, 255, 0.04); } .fm-csv-truncated { color: var(--muted); font-style: italic; text-align: center; } /* ============================================================================ FM ENHANCEMENTS: Breadcrumb, Filters, Recent, OS-Button, Copy-Button ============================================================================ */ /* Breadcrumb */ .fm-breadcrumb { display: flex; align-items: center; gap: 4px; padding: 6px 12px; margin-bottom: 8px; background: rgba(10, 25, 37, 0.3); border: 1px solid var(--line); border-radius: var(--radius-small); font-size: 0.82rem; color: var(--muted); flex-wrap: wrap; min-height: 32px; } .fm-bc-item { cursor: pointer; padding: 2px 8px; border-radius: 4px; transition: all var(--transition-fast); color: var(--muted); } .fm-bc-item:hover { color: #7aabff; background: rgba(74, 124, 247, 0.08); } .fm-bc-item.fm-bc-root { font-weight: 600; color: var(--text); } .fm-bc-separator { color: #555; font-size: 0.7rem; user-select: none; } .fm-bc-current { color: var(--text); font-weight: 500; cursor: default; } /* File-type filter chips */ .fm-filters { display: flex; align-items: center; gap: 4px; padding: 4px 0; margin-bottom: 8px; flex-wrap: wrap; } .fm-filter-chip { padding: 3px 10px; border: 1px solid rgba(255, 255, 255, 0.08); border-radius: 12px; background: transparent; color: var(--muted); cursor: pointer; font-family: var(--font-family); font-size: 0.75rem; transition: all var(--transition-fast); white-space: nowrap; } .fm-filter-chip:hover { border-color: rgba(74, 124, 247, 0.3); color: var(--text); background: rgba(74, 124, 247, 0.06); } .fm-filter-chip.active { background: rgba(74, 124, 247, 0.2); border-color: var(--color-primary); color: #7aabff; font-weight: 500; } /* Open-in-OS button */ .fm-os-btn { background: rgba(74, 124, 247, 0.1); border: 1px solid rgba(255, 255, 255, 0.08); color: var(--muted); cursor: pointer; font-size: 1rem; padding: 4px 10px; border-radius: var(--radius-small); transition: all var(--transition-fast); line-height: 1; } .fm-os-btn:hover { background: rgba(74, 124, 247, 0.2); color: var(--text); border-color: rgba(74, 124, 247, 0.3); } /* Sidebar actions */ .fm-sidebar-actions { display: flex; gap: 4px; } .fm-sidebar-action-btn { background: none; border: none; color: var(--muted); cursor: pointer; font-size: 0.95rem; padding: 2px 6px; border-radius: 4px; transition: all var(--transition-fast); } .fm-sidebar-action-btn:hover { color: var(--text); background: rgba(255, 255, 255, 0.06); } /* Recent files panel */ .fm-recent { border-top: 1px solid var(--line); background: rgba(10, 25, 37, 0.4); max-height: 200px; overflow-y: auto; } .fm-recent-header { display: flex; justify-content: space-between; align-items: center; padding: 8px 12px; font-size: 0.82rem; color: var(--muted); font-weight: 500; border-bottom: 1px solid var(--line); } .fm-recent-list { padding: 4px 0; } .fm-recent-item { display: flex; align-items: center; gap: 8px; padding: 5px 12px; cursor: pointer; font-size: 0.82rem; color: var(--muted); transition: background var(--transition-fast); } .fm-recent-item:hover { background: rgba(255, 255, 255, 0.04); color: var(--text); } .fm-recent-item .fm-recent-icon { font-size: 0.85rem; flex-shrink: 0; } .fm-recent-item .fm-recent-name { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .fm-recent-item .fm-recent-source { font-size: 0.7rem; color: #555; flex-shrink: 0; } /* Copy button for code blocks */ .fm-copy-btn { position: absolute; top: 6px; right: 6px; padding: 4px 10px; background: rgba(0, 0, 0, 0.5); border: 1px solid rgba(255, 255, 255, 0.1); border-radius: 4px; color: var(--muted); cursor: pointer; font-family: var(--font-family); font-size: 0.72rem; transition: all var(--transition-fast); opacity: 0; z-index: 2; } .fm-code-wrapper { position: relative; } .fm-code-wrapper:hover .fm-copy-btn { opacity: 1; } .fm-copy-btn:hover { background: rgba(74, 124, 247, 0.25); color: #fff; border-color: var(--color-primary); } .fm-copy-btn.copied { background: rgba(74, 200, 100, 0.25); border-color: rgba(74, 200, 100, 0.4); color: #6f6; opacity: 1; } /* File header with copy */ .fm-file-header-actions { display: flex; align-items: center; gap: 8px; } .fm-file-copy-btn { padding: 4px 10px; background: rgba(74, 124, 247, 0.12); border: 1px solid rgba(255, 255, 255, 0.08); border-radius: 4px; color: var(--muted); cursor: pointer; font-family: var(--font-family); font-size: 0.72rem; transition: all var(--transition-fast); } .fm-file-copy-btn:hover { background: rgba(74, 124, 247, 0.25); color: #fff; } /* ============================================================================ HEALTH / PROBLEMS DRAWER (Operator Workbench) ============================================================================ */ .health-bar { display: flex; align-items: center; gap: 8px; margin-left: 12px; padding: 6px 10px; border-radius: var(--radius-pill); border: 1px solid var(--line); background: rgba(10, 25, 37, 0.6); cursor: pointer; transition: background var(--transition-fast); } .health-bar:hover { background: rgba(255, 255, 255, 0.05); } .health-indicator { width: 10px; height: 10px; border-radius: 50%; background: #555; } .health-indicator.health-ok { background: var(--color-success); box-shadow: 0 0 6px rgba(36, 180, 110, 0.5); } .health-indicator.health-warning { background: var(--color-warning); } .health-indicator.health-error { background: var(--color-danger); } .health-indicator.health-stale { background: #c586c0; } .health-indicator.health-unavailable { background: #8899bb; } .health-indicator.health-disabled { background: #555; } .health-summary { font-size: 0.78rem; color: var(--muted); font-weight: 500; } .health-toggle { background: transparent; border: none; color: var(--accent2); cursor: pointer; font-size: 0.75rem; font-weight: 600; padding: 0; } .health-drawer { position: fixed; top: 0; right: 0; width: min(420px, 90vw); height: 100vh; background: rgba(7, 16, 25, 0.98); border-left: 1px solid var(--line); box-shadow: -10px 0 40px rgba(0, 0, 0, 0.4); transform: translateX(100%); transition: transform var(--transition-medium); z-index: 100; display: flex; flex-direction: column; } .health-drawer.open { transform: translateX(0); } .health-drawer__header { display: flex; justify-content: space-between; align-items: center; padding: 18px 20px; border-bottom: 1px solid var(--line); } .health-drawer__header h3 { margin: 0; font-size: 1.1rem; } .health-drawer__close { background: none; border: none; color: var(--muted); font-size: 1.4rem; cursor: pointer; } .health-drawer__close:hover { color: var(--text); } .health-drawer__counts { display: flex; gap: 10px; padding: 14px 20px; border-bottom: 1px solid rgba(255, 255, 255, 0.04); } .health-count { min-width: 36px; text-align: center; padding: 6px 10px; border-radius: var(--radius-pill); font-size: 0.8rem; font-weight: 600; color: #fff; } .health-count--error { background: var(--color-danger); } .health-count--warning { background: var(--color-warning); } .health-count--stale { background: #c586c0; } .health-count--unavailable { background: #8899bb; } .health-drawer__section { padding: 16px 20px; border-bottom: 1px solid rgba(255, 255, 255, 0.04); overflow-y: auto; flex: 1; } .health-drawer__section h4 { margin: 0 0 10px 0; font-size: 0.85rem; color: var(--muted); text-transform: uppercase; letter-spacing: 0.08em; } .health-empty { color: var(--muted); font-style: italic; font-size: 0.85rem; padding: 8px 0; } .health-problem { padding: 10px 12px; border-radius: var(--radius-small); border: 1px solid var(--line); background: rgba(255, 255, 255, 0.02); margin-bottom: 8px; } .health-problem__component { font-weight: 600; font-size: 0.85rem; } .health-problem__status { display: inline-block; font-size: 0.7rem; padding: 2px 8px; border-radius: var(--radius-pill); margin: 4px 0; font-weight: 600; text-transform: uppercase; letter-spacing: 0.05em; } .health-problem__reason { font-size: 0.8rem; color: var(--muted); } .health-problem__error { font-size: 0.75rem; color: var(--danger); margin-top: 6px; font-family: var(--font-mono); } .health-problem--health-error .health-problem__status { background: rgba(220, 53, 69, 0.15); color: #f06070; } .health-problem--health-warning .health-problem__status { background: rgba(230, 170, 40, 0.15); color: #f0c040; } .health-problem--health-stale .health-problem__status { background: rgba(197, 134, 192, 0.15); color: #c586c0; } .health-problem--health-unavailable .health-problem__status { background: rgba(136, 153, 187, 0.15); color: #8899bb; } .health-component-list { display: grid; gap: 6px; } .health-runtime-list { display: grid; gap: 8px; } .health-component { display: flex; align-items: center; justify-content: space-between; padding: 8px 10px; border-radius: 6px; border: 1px solid var(--line); background: rgba(255, 255, 255, 0.02); font-size: 0.82rem; } .health-component__name { font-weight: 500; } .health-component__status { text-transform: uppercase; font-size: 0.7rem; font-weight: 600; padding: 2px 8px; border-radius: var(--radius-pill); } .health-component--health-ok .health-component__status { background: rgba(36, 180, 110, 0.12); color: #4ddb8a; } .health-component--health-error .health-component__status { background: rgba(220, 53, 69, 0.12); color: #f06070; } .health-component--health-warning .health-component__status { background: rgba(230, 170, 40, 0.12); color: #f0c040; } .health-component--health-stale .health-component__status { background: rgba(197, 134, 192, 0.12); color: #c586c0; } .health-component--health-unavailable .health-component__status { background: rgba(136, 153, 187, 0.12); color: #8899bb; } .health-component--health-disabled .health-component__status { background: rgba(85, 85, 85, 0.2); color: #888; } .fm-file-copy-btn.copied { background: rgba(74, 200, 100, 0.25); border-color: rgba(74, 200, 100, 0.4); color: #6f6; } /* ---- Dynamic Alpha.5 Release Gate (evidence-based) ---- */ .gate-legend { color: var(--muted); font-size: 0.82rem; margin: 0 0 12px 0; line-height: 1.5; } .gate-section { margin-top: 24px; } .gate-section h3 { font-size: 1rem; margin-bottom: 12px; border-bottom: 1px solid var(--line); padding-bottom: 6px; } .gate-section-hint { font-size: 0.78rem; color: var(--muted); font-weight: 400; } .gate-overall-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 10px; } .gate-overall-grid .gate-overall-row { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin: 0; padding: 12px 14px; border: 1px solid var(--line); border-radius: var(--radius-card); background: rgba(255, 255, 255, .025); } .gate-section-live { margin-top: 18px; } .gate-sections-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 16px; align-items: start; } .gate-sections-grid .gate-section { min-width: 0; margin-top: 18px; } /* Live runtime profile grid */ .gate-live-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 10px; } .gate-live-item { display: flex; align-items: flex-start; gap: 10px; padding: 10px 14px; border-radius: var(--radius-card); border: 1px solid var(--line); background: rgba(10, 25, 37, 0.6); } .gate-live-icon { font-size: 1.2rem; flex-shrink: 0; } .gate-live-label strong { display: block; font-size: 0.85rem; margin-bottom: 2px; } .gate-live-msg { font-size: 0.76rem; color: var(--muted); } .gate-live-item.live-active { border-color: rgba(80, 220, 120, 0.4); } .gate-live-item.live-disabled { opacity: 0.7; border-color: rgba(136, 153, 187, 0.3); } .gate-live-item.live-unavailable { opacity: 0.6; border-color: rgba(255, 200, 80, 0.2); } .gate-live-item.live-error { border-color: rgba(240, 96, 112, 0.4); } /* Criteria table (Gate A / B / C) */ .gate-criteria-table { border: 1px solid var(--line); border-radius: var(--radius-card); overflow: hidden; } .gate-row { display: grid; grid-template-columns: 1fr 60px 120px 140px; align-items: center; gap: 8px; padding: 10px 14px; border-bottom: 1px solid var(--line); font-size: 0.85rem; cursor: pointer; } .gate-row:focus-visible { outline: 2px solid var(--accent2); outline-offset: -2px; } .gate-row:last-child { border-bottom: none; } .gate-row-header { font-weight: 600; font-size: 0.78rem; color: var(--muted); text-transform: uppercase; background: rgba(255, 255, 255, 0.02); } .gate-col-criterion { display: flex; flex-direction: column; } .gate-col-criterion strong { font-size: 0.85rem; } .gate-col-msg { font-size: 0.74rem; color: var(--muted); margin-top: 2px; } .gate-col-live { text-align: center; font-size: 1rem; } .gate-col-maturity { text-align: center; font-size: 0.72rem; font-weight: 600; letter-spacing: 0.03em; } .gate-col-result { text-align: center; font-size: 0.8rem; font-weight: 600; } /* Maturity badge colors */ .maturity-IMPLEMENTED { color: #8899bb; } .maturity-INTEGRATED { color: #6cb4ff; } .maturity-VERIFIED { color: #50dc78; } .maturity-EVIDENCED { color: #c878ff; } /* Gate result row colors */ .gate-row-passed { background: rgba(80, 220, 120, 0.04); } .gate-row-pending { background: rgba(255, 200, 80, 0.03); } .gate-row-stale { background: rgba(255, 200, 120, 0.05); } .gate-row-failed { background: rgba(240, 96, 112, 0.05); } .gate-row-blocked { background: rgba(240, 96, 112, 0.05); } .gate-col-result.gate-passed { color: #50dc78; } .gate-col-result.gate-pending { color: #ffc850; } .gate-col-result.gate-stale { color: #ffc878; } .gate-detail-dialog { width: min(680px, calc(100% - 28px)); max-height: min(760px, calc(100vh - 28px)); padding: 0; border: 1px solid var(--line); border-radius: var(--radius-card); color: var(--text); background: var(--panel); box-shadow: 0 24px 80px rgba(0, 0, 0, .55); } .gate-detail-dialog::backdrop { background: rgba(0, 7, 13, .78); backdrop-filter: blur(4px); } .gate-detail-header { display: flex; justify-content: space-between; gap: 16px; padding: 18px 20px; border-bottom: 1px solid var(--line); } .gate-detail-header h2 { margin: 4px 0 0; font-size: 1.1rem; } .gate-detail-body { display: grid; gap: 14px; padding: 20px; overflow: auto; } .gate-detail-field { display: grid; gap: 4px; } .gate-detail-field strong { color: var(--muted); font-size: .72rem; text-transform: uppercase; letter-spacing: .04em; } .gate-detail-field p { margin: 0; overflow-wrap: anywhere; } .gate-detail-status { font-weight: 700; text-transform: uppercase; } .gate-detail-reason { padding: 10px 12px; border-left: 3px solid var(--accent2); background: rgba(255,255,255,.04); } .gate-detail-field pre { margin: 0; padding: 10px 12px; overflow: auto; border: 1px solid var(--line); background: rgba(0,0,0,.2); font-size: .75rem; white-space: pre-wrap; overflow-wrap: anywhere; } .gate-col-result.gate-failed { color: #f06070; } .gate-col-result.gate-blocked { color: #f06070; } .gate-col-live.live-active { color: #50dc78; } .gate-col-live.live-disabled { color: #8899bb; } .gate-col-live.live-unavailable { color: #ffc850; } .gate-col-live.live-error { color: #f06070; } .gate-col-live.live-na { color: var(--muted); } @media (max-width: 768px) { .research-browser { grid-template-columns: 1fr; } .research-sidebar { max-height: 300px; } .gate-grid { grid-template-columns: 1fr; } .gate-checklist { grid-template-columns: 1fr; } .gate-row { grid-template-columns: minmax(0, 1fr) 40px 90px 100px; font-size: 0.78rem; } .gate-overall-grid, .gate-sections-grid { grid-template-columns: 1fr; } .gate-live-grid { grid-template-columns: 1fr; } .gate-criteria-table { overflow-x: auto; } .gate-row { min-width: 470px; } } /* ============================================================================ MODAL (Popup) ============================================================================ */ .modal-overlay { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0, 0, 0, 0.7); backdrop-filter: blur(6px); display: flex; align-items: center; justify-content: center; z-index: 1000; animation: fadeIn 0.2s ease; } .modal-content { background: linear-gradient(145deg, rgba(16, 37, 54, 0.98), rgba(10, 25, 37, 0.98)); border: 1px solid var(--line); border-radius: var(--radius-card); box-shadow: 0 20px 60px rgba(0, 0, 0, 0.5); width: 90%; max-width: 800px; max-height: 80vh; display: flex; flex-direction: column; animation: slideUp 0.3s ease; } @keyframes slideUp { from { opacity: 0; transform: translateY(30px); } to { opacity: 1; transform: translateY(0); } } .modal-header { display: flex; justify-content: space-between; align-items: center; padding: 20px 24px 12px; border-bottom: 1px solid rgba(255, 255, 255, 0.06); } .modal-header h2 { margin: 0; font-size: 1.15rem; font-weight: 600; } .modal-close { background: none; border: none; color: var(--muted); font-size: 1.6rem; cursor: pointer; padding: 0 4px; line-height: 1; transition: color var(--transition-fast); } .modal-close:hover { color: var(--text); } .modal-body { padding: 16px 24px; overflow-y: auto; flex: 1; } .modal-loading { text-align: center; padding: 40px; color: var(--muted); font-style: italic; } .modal-footer { display: flex; gap: 10px; justify-content: flex-end; padding: 12px 24px 20px; border-top: 1px solid rgba(255, 255, 255, 0.04); } /* Integration version table in modal */ .int-version-section { margin-bottom: 20px; } .int-version-section h3 { font-size: 1rem; margin: 0 0 8px 0; color: var(--accent); border-bottom: 1px solid rgba(255, 255, 255, 0.06); padding-bottom: 6px; } .int-version-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 8px; } .int-version-item { display: flex; align-items: center; gap: 8px; padding: 8px 12px; border-radius: var(--radius-small); border: 1px solid rgba(255, 255, 255, 0.06); font-size: 0.82rem; transition: all var(--transition-fast); } .int-version-item.int-passed { border-color: rgba(80, 220, 120, 0.4); background: rgba(80, 220, 120, 0.06); color: #50dc78; } .int-version-item.int-disabled { border-color: rgba(136, 153, 187, 0.3); background: rgba(136, 153, 187, 0.04); color: #8899bb; opacity: 0.7; } .int-version-item.int-unavailable { border-color: rgba(255, 200, 80, 0.3); background: rgba(255, 200, 80, 0.04); color: #ffc850; } .int-version-item.int-pending { border-color: rgba(255, 200, 80, 0.3); background: rgba(255, 200, 80, 0.04); color: #ffc850; } .int-version-item.int-failed { border-color: rgba(240, 96, 112, 0.4); background: rgba(240, 96, 112, 0.06); color: #f06070; } .int-version-item.int-unknown { border-color: rgba(255, 200, 80, 0.3); background: rgba(255, 200, 80, 0.04); color: #ffc850; } .int-version-icon { font-size: 1.1rem; flex-shrink: 0; } .int-version-label { flex: 1; } .int-version-detail { font-size: 0.7rem; opacity: 0.6; } .integration-item.clickable { cursor: pointer; } .integration-item.clickable:hover { transform: translateY(-2px); box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3); } /* ============================================================================ ACCESSIBILITY ============================================================================ */ *:focus-visible { outline: 2px solid var(--color-primary); outline-offset: 2px; border-radius: 4px; } /* Reduced motion */ @media (prefers-reduced-motion: reduce) { *, *::before, *::after { animation-duration: 0.01ms !important; animation-iteration-count: 1 !important; transition-duration: 0.01ms !important; } .runtime-state[data-mode="running"]::before, .status-badge.status-running::before, .proposals-summary .badge.has-proposals::after { animation: none !important; } .tab-content { animation: none !important; } } /* High contrast */ @media (prefers-contrast: high) { .card, .control-card, .operator-console { border-color: rgba(255, 255, 255, 0.25); } .control-group, .proposal-item { border-color: rgba(255, 255, 255, 0.15); } .runtime-state, .status-badge { border: 1px solid currentColor; } .btn-approve, .btn-reject { border: 1px solid currentColor; } .tab-btn.active { border: 1px solid var(--color-primary); } } /* ============================================================================ STRUCTURAL LIVE LOOP CARD ============================================================================ */ .structural-live-card { padding: 18px; margin-top: 14px; } .structural-live-grid { display: flex; flex-direction: column; align-items: stretch; gap: 4px; margin-top: 12px; max-width: 320px; } .live-loop-step { position: relative; display: flex; flex-direction: row; justify-content: space-between; align-items: center; padding: 8px 12px; border-radius: 8px; border: 1px solid var(--line); background: rgba(255, 255, 255, 0.02); font-size: 0.85rem; text-align: left; transition: all var(--transition-medium); } .live-loop-step .live-loop-label { font-weight: 500; color: var(--text-secondary); } .live-loop-step .live-loop-status { font-size: 0.8rem; color: var(--text-muted); white-space: nowrap; } .live-loop-step::after { content: '↓'; position: absolute; left: 50%; bottom: -12px; transform: translateX(-50%); color: var(--text-muted); font-size: 0.85rem; z-index: 1; } .live-loop-step:last-child::after { content: none; } .live-loop-step.ll-passed { border-color: rgba(80, 220, 120, 0.5); background: rgba(80, 220, 120, 0.08); color: #50dc78; } .live-loop-step.ll-passed .live-loop-status { color: #50dc78; } .live-loop-step.ll-pending { border-color: rgba(255, 200, 80, 0.3); background: rgba(255, 200, 80, 0.05); color: #ffc850; } .live-loop-step.ll-pending .live-loop-status { color: #ffc850; } .live-loop-step.ll-stale { border-color: rgba(100, 180, 255, 0.4); background: rgba(100, 180, 255, 0.06); color: #64b4ff; } .live-loop-step.ll-stale .live-loop-status { color: #64b4ff; } /* ============================================================================ ERROR VISIBILITY CARD ============================================================================ */ .error-visibility-card { padding: 18px; margin-top: 14px; } .error-list { margin-top: 10px; max-height: 200px; overflow-y: auto; } .error-empty { padding: 12px; color: var(--muted); font-size: 0.85rem; text-align: center; } .error-item { display: flex; gap: 10px; align-items: center; padding: 6px 10px; border-radius: 6px; margin-bottom: 4px; font-size: 0.8rem; font-family: var(--font-mono); border-left: 3px solid var(--color-warning); background: rgba(255, 200, 80, 0.05); } .error-item.error-fatal { border-left-color: var(--color-danger); background: rgba(220, 53, 69, 0.08); } .error-tick { color: var(--accent2); min-width: 60px; } .error-phase { color: var(--color-info); min-width: 80px; } .error-type { color: var(--color-warning); min-width: 120px; overflow: hidden; text-overflow: ellipsis; } .error-msg { color: var(--text); flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .error-hash { color: var(--muted); font-size: 0.7rem; } /* ============================================================================ PRINT STYLES ============================================================================ */ @media print { body { background: white !important; color: black !important; } .card, .control-card, .operator-console { background: white !important; color: black !important; border: 1px solid #ccc !important; box-shadow: none !important; } .tab-nav { display: none !important; } .tab-content { display: block !important; } .control-group button, .operator-console button { background: #eee !important; color: black !important; } .console-output { max-height: none !important; background: #f5f5f5 !important; color: black !important; } } /* ============================================================================ BIBTEX VIEWER ============================================================================ */ .bibtex-viewer { font-family: var(--font-family); } .bibtex-toolbar { display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: 10px; padding: 8px 0 12px; border-bottom: 1px solid var(--line); margin-bottom: 10px; } .bibtex-toolbar-left { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; } .bibtex-toolbar-right { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; } .bibtex-title { font-weight: 600; font-size: 0.95rem; color: var(--text); } .bibtex-count { font-size: 0.82rem; color: var(--muted); background: rgba(255, 255, 255, 0.05); padding: 2px 10px; border-radius: 12px; } .bibtex-warning { font-size: 0.78rem; color: var(--color-warning); background: rgba(230, 170, 40, 0.12); padding: 2px 10px; border-radius: 12px; } .bibtex-ok { font-size: 0.78rem; color: var(--color-success); background: rgba(36, 180, 110, 0.12); padding: 2px 10px; border-radius: 12px; } .bibtex-view-btn { padding: 4px 10px; border: 1px solid rgba(255, 255, 255, 0.08); border-radius: 6px; background: transparent; color: var(--muted); cursor: pointer; font-family: var(--font-family); font-size: 0.75rem; transition: all var(--transition-fast); } .bibtex-view-btn:hover { border-color: rgba(74, 124, 247, 0.3); color: var(--text); background: rgba(74, 124, 247, 0.06); } .bibtex-view-btn.active { background: rgba(74, 124, 247, 0.2); border-color: var(--color-primary); color: #7aabff; font-weight: 500; } .bibtex-copy-all-btn, .bibtex-export-btn { padding: 4px 10px; border: 1px solid rgba(255, 255, 255, 0.08); border-radius: 6px; background: rgba(74, 124, 247, 0.1); color: var(--muted); cursor: pointer; font-family: var(--font-family); font-size: 0.75rem; transition: all var(--transition-fast); } .bibtex-copy-all-btn:hover, .bibtex-export-btn:hover { background: rgba(74, 124, 247, 0.25); color: #fff; border-color: rgba(74, 124, 247, 0.3); } /* Validation bar */ .bibtex-validation-bar { margin-bottom: 10px; } .bibtex-validation-msg { font-size: 0.78rem; padding: 4px 12px; border-radius: 6px; display: inline-block; } .bibtex-validation-msg.ok { color: var(--color-success); background: rgba(36, 180, 110, 0.08); } .bibtex-validation-msg.warning { color: var(--color-warning); background: rgba(230, 170, 40, 0.08); } .bibtex-show-issues { color: #7aabff; text-decoration: none; border-bottom: 1px dashed rgba(122, 171, 255, 0.3); } .bibtex-show-issues:hover { border-bottom-color: #7aabff; } /* Table */ .bibtex-table-container { overflow-x: auto; margin-bottom: 12px; border: 1px solid var(--line); border-radius: 8px; } .bibtex-table { width: 100%; border-collapse: separate; border-spacing: 0; font-size: 0.85rem; line-height: 1.5; } .bibtex-table thead th { background: rgba(74, 124, 247, 0.12); color: #7aabff; padding: 10px 12px; text-align: left; font-weight: 600; border-bottom: 1px solid var(--line); white-space: nowrap; user-select: none; position: sticky; top: 0; z-index: 1; } .bibtex-sortable { cursor: pointer; transition: background var(--transition-fast); } .bibtex-sortable:hover { background: rgba(74, 124, 247, 0.2); } .bibtex-sort-icon { font-size: 0.7rem; color: #555; margin-left: 4px; } .bibtex-table tbody td { padding: 10px 12px; border-bottom: 1px solid var(--line); color: var(--text); vertical-align: top; } .bibtex-table tbody tr:last-child td { border-bottom: none; } .bibtex-table tbody tr { transition: background var(--transition-fast); } .bibtex-table tbody tr:hover { background: rgba(74, 124, 247, 0.05); } .bibtex-table tbody tr:nth-child(even) { background: rgba(255, 255, 255, 0.02); } .bibtex-table tbody tr:nth-child(even):hover { background: rgba(74, 124, 247, 0.07); } .bibtex-row-warn { border-left: 3px solid var(--color-warning) !important; } .bibtex-cell-key code { font-family: var(--font-mono); font-size: 0.78rem; color: #ce9178; } .bibtex-cell-author { max-width: 220px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .bibtex-cell-title { max-width: 320px; overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; white-space: normal; line-height: 1.4; line-clamp: 2; } .bibtex-cell-year { text-align: center; font-family: var(--font-mono); color: #b5cea8; white-space: nowrap; } .bibtex-cell-status { text-align: center; } .bibtex-type-badge { display: inline-block; padding: 1px 8px; border-radius: 4px; font-size: 0.7rem; font-weight: 500; background: rgba(74, 124, 247, 0.12); color: #7aabff; text-transform: uppercase; letter-spacing: 0.3px; } .bibtex-status-ok { font-size: 0.85rem; cursor: default; } .bibtex-status-warn { font-size: 0.85rem; cursor: help; } /* Action buttons in table */ .bibtex-cell-actions { white-space: nowrap; } .bibtex-action-btn { padding: 2px 7px; border: 1px solid rgba(255, 255, 255, 0.06); border-radius: 4px; background: rgba(255, 255, 255, 0.03); color: var(--muted); cursor: pointer; font-family: var(--font-family); font-size: 0.68rem; transition: all var(--transition-fast); margin: 0 1px; } .bibtex-action-btn:hover { background: rgba(74, 124, 247, 0.2); color: #fff; border-color: rgba(74, 124, 247, 0.3); } /* Code view */ .bibtex-code-container { margin-bottom: 12px; } .bibtex-code { background: rgba(0, 0, 0, 0.35); padding: 16px; border-radius: var(--radius-small); overflow-x: auto; font-family: var(--font-mono); font-size: 0.78rem; line-height: 1.5; white-space: pre-wrap; word-wrap: break-word; border: 1px solid rgba(255, 255, 255, 0.04); margin: 0; color: var(--text); max-height: 500px; overflow-y: auto; } /* Footer stats */ .bibtex-footer { border-top: 1px solid var(--line); padding-top: 10px; margin-top: 4px; } .bibtex-footer-stats { display: flex; gap: 16px; flex-wrap: wrap; font-size: 0.78rem; color: var(--muted); } .bibtex-footer-stats strong { color: var(--text); } .runtime-state.status-running::before { animation: none !important; } /* ============================================================================ SOURCE BADGE (LIVE vs SNAPSHOT) ============================================================================ */ .badge { display: inline-block; padding: 2px 8px; border-radius: 10px; font-size: 0.7rem; font-weight: 700; letter-spacing: 0.5px; text-transform: uppercase; } .badge-live { background: rgba(64, 224, 168, 0.2); color: #40e0a8; border: 1px solid rgba(64, 224, 168, 0.3); } .badge-snapshot { background: rgba(255, 200, 80, 0.15); color: #ffc850; border: 1px solid rgba(255, 200, 80, 0.25); } .badge-stale { background: rgba(255, 160, 60, 0.2); color: #ffa03c; border: 1px solid rgba(255, 160, 60, 0.3); } .badge-unavailable { background: rgba(240, 96, 112, 0.15); color: #f06070; border: 1px solid rgba(240, 96, 112, 0.25); } /* ============================================================================ PROVENANCE BADGE ============================================================================ */ .provenance-badge { display: inline-block; padding: 1px 6px; border-radius: 8px; font-size: 0.6rem; font-weight: 600; letter-spacing: 0.3px; vertical-align: middle; margin-left: 4px; } /* ============================================================================ EXPERIMENT MODE (Operator Workbench) ============================================================================ */ .experiment-mode-switcher { display: flex; align-items: center; gap: 2px; padding: 2px; border: 1px solid var(--line); border-radius: var(--radius-pill); background: rgba(10, 25, 37, 0.6); margin-right: 8px; } .mode-btn { background: transparent; border: none; color: var(--muted); cursor: pointer; font-size: 0.9rem; padding: 4px 8px; border-radius: var(--radius-pill); transition: all var(--transition-fast); line-height: 1; } /* ============================================================================ FILE VIEWER EXTRAS (history, fullscreen, search) ============================================================================ */ .fm-fullscreen .fm-file-viewer { position: fixed; top: 0; left: 0; width: 100vw; height: 100vh; z-index: 1000; border-radius: 0; margin: 0; display: flex; flex-direction: column; } .fm-fullscreen .fm-content { flex: 1; overflow: auto; } .fm-history-panel { border-top: 1px solid var(--line); background: var(--panel); padding: 0.75rem 1rem; max-height: 220px; overflow-y: auto; } .fm-history-loading, .fm-history-empty { color: var(--muted); font-size: 0.9rem; padding: 0.5rem 0; } .fm-history-item { padding: 0.5rem 0; border-bottom: 1px solid var(--line); } .fm-history-item:last-child { border-bottom: none; } .fm-history-meta { display: flex; gap: 0.75rem; align-items: center; flex-wrap: wrap; font-size: 0.8rem; margin-bottom: 0.25rem; } .fm-history-hash { background: var(--bg); padding: 0.1rem 0.35rem; border-radius: 4px; font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; } .fm-history-date { color: var(--muted); } .fm-history-author { font-weight: 600; } .fm-history-message { font-size: 0.9rem; color: var(--text); } /* Metadata / annotation sidecar panel */ .fm-meta-panel { border-top: 1px solid var(--line); background: var(--panel); padding: 0.75rem 1rem; display: flex; flex-direction: column; gap: 0.5rem; max-height: 280px; min-height: 180px; } .fm-meta-header { display: flex; align-items: center; gap: 0.75rem; flex-wrap: wrap; } .fm-meta-title { font-weight: 600; color: var(--text); } .fm-meta-path { color: var(--muted); font-size: 0.8rem; font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; } .fm-meta-save-btn { margin-left: auto; background: var(--color-primary); color: #fff; border: none; border-radius: var(--radius-small); padding: 0.35rem 0.75rem; cursor: pointer; font-size: 0.9rem; } .fm-meta-save-btn:hover:not(:disabled) { background: var(--color-primary-hover); } .fm-meta-save-btn:disabled { opacity: 0.6; cursor: wait; } .fm-meta-textarea { flex: 1; min-height: 100px; background: var(--bg); color: var(--text); border: 1px solid var(--line); border-radius: var(--radius-small); padding: 0.5rem; font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; font-size: 0.85rem; resize: vertical; } .fm-meta-textarea:focus { outline: none; border-color: var(--color-primary); box-shadow: var(--shadow-focus); } .fm-meta-status { font-size: 0.8rem; color: var(--muted); min-height: 1.2rem; } .fm-meta-status.fm-meta-error { color: var(--danger); } .fm-meta-loading, .fm-meta-empty { color: var(--muted); font-size: 0.9rem; padding: 0.5rem 0; } /* Document analysis panel */ .fm-analyze-panel { border-top: 1px solid var(--line); background: var(--panel); padding: 0.75rem 1rem; display: flex; flex-direction: column; gap: 0.75rem; max-height: 320px; overflow-y: auto; } .fm-analyze-header { display: flex; align-items: center; gap: 1rem; flex-wrap: wrap; } .fm-analyze-title { font-weight: 600; color: var(--text); } .fm-analyze-lang { color: var(--muted); font-size: 0.85rem; } .fm-analyze-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(90px, 1fr)); gap: 0.5rem; } .fm-analyze-stat { background: var(--bg); border: 1px solid var(--line); border-radius: var(--radius-small); padding: 0.5rem; text-align: center; font-size: 0.85rem; color: var(--muted); } .fm-analyze-stat strong { display: block; font-size: 1.1rem; color: var(--text); } .fm-analyze-row { display: flex; gap: 1rem; flex-wrap: wrap; } .fm-analyze-block { flex: 1; min-width: 200px; } .fm-analyze-block h4 { margin: 0 0 0.35rem; font-size: 0.85rem; color: var(--accent); } .fm-analyze-keywords { display: flex; flex-wrap: wrap; gap: 0.35rem; } .fm-analyze-keyword { background: var(--bg); border: 1px solid var(--line); border-radius: var(--radius-pill); padding: 0.15rem 0.5rem; font-size: 0.8rem; color: var(--text); } .fm-analyze-readability { font-size: 0.9rem; color: var(--text); } .fm-analyze-sentiment { display: inline-block; padding: 0.2rem 0.6rem; border-radius: var(--radius-pill); font-size: 0.85rem; font-weight: 600; } .fm-analyze-sentiment-positive { background: rgba(36, 180, 110, 0.2); color: var(--color-success); } .fm-analyze-sentiment-negative { background: rgba(255, 93, 115, 0.2); color: var(--danger); } .fm-analyze-sentiment-neutral { background: rgba(142, 178, 193, 0.2); color: var(--muted); } .fm-analyze-summary { font-size: 0.9rem; color: var(--text); line-height: 1.5; margin: 0; } .fm-analyze-loading, .fm-analyze-empty { color: var(--muted); font-size: 0.9rem; padding: 0.5rem 0; } /* Research registry card renderer */ .fm-registry-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(320px, 1fr)); gap: 1rem; padding: 0.5rem 0; } .fm-registry-card { background: var(--bg); border: 1px solid var(--line); border-radius: var(--radius-medium); padding: 1rem; display: flex; flex-direction: column; gap: 0.5rem; } .fm-registry-card-header { display: flex; justify-content: space-between; align-items: center; gap: 0.5rem; } .fm-registry-id { background: var(--panel); padding: 0.15rem 0.4rem; border-radius: 4px; font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; font-size: 0.85rem; color: var(--accent); } .fm-registry-badge { padding: 0.15rem 0.5rem; border-radius: var(--radius-pill); font-size: 0.75rem; font-weight: 600; text-transform: uppercase; letter-spacing: 0.3px; } .fm-registry-badge-open { background: rgba(230, 170, 40, 0.2); color: var(--color-warning); } .fm-registry-badge-answered, .fm-registry-badge-confirmed, .fm-registry-badge-done, .fm-registry-badge-active { background: rgba(36, 180, 110, 0.2); color: var(--color-success); } .fm-registry-badge-rejected, .fm-registry-badge-failed, .fm-registry-badge-closed { background: rgba(255, 93, 115, 0.2); color: var(--danger); } .fm-registry-badge-candidate, .fm-registry-badge-draft, .fm-registry-badge-unknown { background: rgba(142, 178, 193, 0.2); color: var(--muted); } .fm-registry-type { font-size: 0.75rem; text-transform: uppercase; letter-spacing: 0.5px; color: var(--accent2); font-weight: 600; } .fm-registry-title { font-size: 1rem; font-weight: 600; color: var(--text); line-height: 1.4; } .fm-registry-domain { font-size: 0.8rem; color: var(--muted); } .fm-registry-relevance { font-size: 0.85rem; color: var(--text); line-height: 1.5; margin-top: 0.25rem; } .fm-registry-links { display: flex; flex-wrap: wrap; gap: 0.35rem; align-items: center; font-size: 0.8rem; } .fm-registry-link-label { color: var(--muted); margin-right: 0.25rem; } .fm-registry-link { background: var(--panel); padding: 0.1rem 0.35rem; border-radius: 4px; font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; font-size: 0.75rem; color: var(--accent); } .fm-registry-confidence { font-size: 0.8rem; color: var(--muted); } .fm-registry-dates { font-size: 0.75rem; color: var(--muted); margin-top: auto; padding-top: 0.25rem; } .mode-btn:hover { background: rgba(255, 255, 255, 0.05); color: var(--text); } .mode-btn.active { background: rgba(74, 124, 247, 0.25); color: #fff; } .experiment-panel { padding: 18px; margin-top: 14px; } .experiment-badge { display: inline-block; padding: 2px 10px; border-radius: var(--radius-pill); font-size: 0.75rem; font-weight: 600; text-transform: uppercase; letter-spacing: 0.05em; } .experiment-badge.mode-operator { background: rgba(74, 124, 247, 0.15); color: #7aabff; } .experiment-badge.mode-experiment { background: rgba(100, 180, 255, 0.15); color: #64b4ff; } .experiment-badge.mode-debug { background: rgba(197, 134, 192, 0.15); color: #c586c0; } .experiment-form { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 12px; margin-top: 12px; } .experiment-form input[type="text"] { width: 100%; padding: 6px 10px; border: 1px solid rgba(255, 255, 255, 0.08); border-radius: var(--radius-small); background: rgba(0, 0, 0, 0.2); color: var(--text); font-family: var(--font-family); font-size: 0.85rem; } .experiment-form input[type="text"]:focus { outline: none; border-color: var(--color-primary); box-shadow: var(--shadow-focus); } .experiment-actions { display: flex; align-items: flex-end; gap: 8px; } .experiment-note-row { display: flex; gap: 8px; margin-top: 12px; align-items: flex-end; } .experiment-note-row .input-label { flex: 1; } .experiment-note-row input[type="text"] { width: 100%; padding: 6px 10px; border: 1px solid rgba(255, 255, 255, 0.08); border-radius: var(--radius-small); background: rgba(0, 0, 0, 0.2); color: var(--text); font-family: var(--font-family); font-size: 0.85rem; } .experiment-sessions { margin-top: 14px; border: 1px solid var(--line); border-radius: var(--radius-small); padding: 12px 16px; } .experiment-sessions summary { cursor: pointer; font-weight: 600; } .experiment-sessions summary h3 { display: inline; margin: 0; font-size: 0.95rem; } .experiment-session-list { margin-top: 10px; display: flex; flex-direction: column; gap: 8px; max-height: 280px; overflow-y: auto; } .experiment-empty { padding: 8px 0; color: var(--muted); font-size: 0.85rem; font-style: italic; } .experiment-session-item { padding: 10px 12px; border-radius: var(--radius-small); border: 1px solid var(--line); background: rgba(255, 255, 255, 0.02); font-size: 0.82rem; } .experiment-session-item.active { border-left: 3px solid var(--color-success); } .experiment-session-item.closed { border-left: 3px solid var(--muted); opacity: 0.85; } .experiment-session-header { display: flex; align-items: center; gap: 8px; margin-bottom: 4px; } .experiment-session-mode { text-transform: uppercase; font-size: 0.65rem; font-weight: 600; padding: 2px 8px; border-radius: var(--radius-pill); } .experiment-session-mode.mode-operator { background: rgba(74, 124, 247, 0.12); color: #7aabff; } .experiment-session-mode.mode-experiment { background: rgba(100, 180, 255, 0.12); color: #64b4ff; } .experiment-session-mode.mode-debug { background: rgba(197, 134, 192, 0.12); color: #c586c0; } .experiment-session-id { font-family: var(--font-mono); font-weight: 600; font-size: 0.78rem; } .experiment-session-status { margin-left: auto; font-size: 0.7rem; text-transform: uppercase; color: var(--muted); } .experiment-session-hypothesis { color: var(--muted); margin-bottom: 6px; } .experiment-session-meta { display: flex; gap: 12px; flex-wrap: wrap; font-size: 0.75rem; color: var(--muted); } .experiment-session-notes { margin: 8px 0 0 0; padding-left: 18px; font-size: 0.78rem; color: var(--text); } .experiment-session-notes li { margin: 2px 0; } /* ============================================================================ PARAMETER INSPECTOR (Operator Workbench) ============================================================================ */ .parameter-inspector-card { padding: 18px; margin-top: 14px; } .parameter-inspector__toolbar { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; } .parameter-inspector__toolbar input[type="search"] { padding: 6px 10px; border: 1px solid rgba(255, 255, 255, 0.08); border-radius: var(--radius-small); background: rgba(0, 0, 0, 0.2); color: var(--text); font-family: var(--font-family); font-size: 0.85rem; min-width: 220px; } .parameter-inspector__toolbar input[type="search"]:focus { outline: none; border-color: var(--color-primary); box-shadow: var(--shadow-focus); } .parameter-table-wrap { margin-top: 14px; border: 1px solid var(--line); border-radius: var(--radius-small); overflow-x: auto; max-height: 420px; overflow-y: auto; } .parameter-table { width: 100%; border-collapse: collapse; font-size: 0.82rem; } .parameter-table thead th { position: sticky; top: 0; z-index: 1; background: rgba(74, 124, 247, 0.12); color: #7aabff; padding: 10px 12px; text-align: left; font-weight: 600; border-bottom: 1px solid var(--line); white-space: nowrap; } .parameter-table tbody td { padding: 8px 12px; border-bottom: 1px solid rgba(255, 255, 255, 0.04); color: var(--text); vertical-align: middle; } .parameter-table tbody tr:last-child td { border-bottom: none; } .parameter-table tbody tr:hover { background: rgba(255, 255, 255, 0.03); } .parameter-table tbody tr.pending-value { background: rgba(74, 124, 247, 0.06); } .parameter-table tbody tr.pending-restart { background: rgba(255, 200, 80, 0.06); } .parameter-table tbody tr.pending-sensitive { background: rgba(220, 53, 69, 0.05); } .param-name { font-family: var(--font-mono); font-size: 0.78rem; font-weight: 600; } .param-current, .param-pending, .param-default { font-family: var(--font-mono); font-size: 0.78rem; } .param-pending { color: #7aabff; font-weight: 600; } .param-source { font-size: 0.78rem; color: var(--muted); } .param-actions { display: flex; gap: 6px; flex-wrap: nowrap; } .param-badge { display: inline-block; padding: 1px 6px; border-radius: 6px; font-size: 0.65rem; font-weight: 600; text-transform: uppercase; letter-spacing: 0.3px; margin-left: 4px; vertical-align: middle; } .param-badge.mutable { background: rgba(36, 180, 110, 0.12); color: #4ddb8a; } .param-badge.immutable { background: rgba(136, 153, 187, 0.12); color: #8899bb; } .param-badge.restart { background: rgba(255, 200, 80, 0.12); color: #ffc850; } .param-badge.sensitive { background: rgba(220, 53, 69, 0.12); color: #f06070; } .param-badge.profile { background: rgba(100, 180, 255, 0.12); color: #64b4ff; } .parameter-empty { padding: 16px; text-align: center; color: var(--muted); font-style: italic; } .pending-changes-bar { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-top: 14px; padding: 12px 16px; border: 1px solid var(--line); border-radius: var(--radius-small); background: rgba(255, 255, 255, 0.02); } .pending-changes-bar.has-pending { border-color: rgba(74, 124, 247, 0.4); background: rgba(74, 124, 247, 0.06); } .pending-changes-bar__info { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; font-size: 0.9rem; } .pending-hint { font-size: 0.78rem; color: var(--color-warning); } .pending-changes-bar__actions { display: flex; gap: 8px; flex-wrap: wrap; } .change-history { margin-top: 14px; border: 1px solid var(--line); border-radius: var(--radius-small); padding: 12px 16px; } .change-history summary { cursor: pointer; font-weight: 600; color: var(--text); } .change-history summary h3 { display: inline; margin: 0; font-size: 0.95rem; } .change-history-list { margin-top: 10px; display: flex; flex-direction: column; gap: 6px; max-height: 240px; overflow-y: auto; } .change-history-empty { padding: 8px 0; color: var(--muted); font-size: 0.85rem; font-style: italic; } .change-history-item { display: grid; grid-template-columns: 1fr auto auto; gap: 8px; align-items: center; padding: 8px 10px; border-radius: 6px; border: 1px solid var(--line); background: rgba(255, 255, 255, 0.02); font-size: 0.82rem; } .change-history-item.applied { border-left: 3px solid var(--color-success); } .change-history-item.cancelled { border-left: 3px solid var(--muted); } .change-history-name { font-family: var(--font-mono); font-weight: 600; font-size: 0.78rem; } .change-history-action { text-transform: uppercase; font-size: 0.7rem; font-weight: 600; padding: 2px 8px; border-radius: var(--radius-pill); } .change-history-item.applied .change-history-action { background: rgba(36, 180, 110, 0.12); color: #4ddb8a; } .change-history-item.cancelled .change-history-action { background: rgba(136, 153, 187, 0.12); color: #8899bb; } .change-history-time { font-size: 0.75rem; color: var(--muted); } .change-history-values { grid-column: 1 / -1; display: flex; gap: 16px; font-family: var(--font-mono); font-size: 0.75rem; color: var(--muted); } .provenance-badge[data-src="LIVE"] { background: rgba(64, 224, 168, 0.15); color: #40e0a8; border: 1px solid rgba(64, 224, 168, 0.2); } .provenance-badge[data-src="SNAPSHOT"] { background: rgba(255, 200, 80, 0.12); color: #ffc850; border: 1px solid rgba(255, 200, 80, 0.2); } /* ============================================================================ IO-FLUSS VISUALISIERUNG ============================================================================ */ .io-flow-panel { padding: 20px; margin-top: 14px; } .io-flow-grid { display: flex; align-items: center; gap: 12px; margin-top: 16px; padding: 16px; background: #050d14; border-radius: 12px; border: 1px solid #16394b; } .io-flow-layer { flex: 1; padding: 14px; border-radius: 10px; background: rgba(0,0,0,0.3); border: 1px solid rgba(255,255,255,0.06); text-align: center; } .io-input { border-left: 3px solid #40e0a8; } .io-hidden { border-left: 3px solid #4a7cf7; } .io-output { border-left: 3px solid #f0a840; } .io-layer-header { font-size: 13px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 10px; color: var(--muted); } .io-layer-header span { color: var(--text); font-size: 15px; margin-left: 6px; } .io-layer-bar { height: 10px; background: #07141e; border-radius: 999px; overflow: hidden; margin-bottom: 8px; } .io-layer-fill { height: 100%; width: 0%; border-radius: 999px; transition: width 0.5s ease; } .io-input .io-layer-fill { background: linear-gradient(90deg, #20c090, #40e0a8); } .io-hidden .io-layer-fill { background: linear-gradient(90deg, #2a5cd7, #4a7cf7); } .io-output .io-layer-fill { background: linear-gradient(90deg, #d08820, #f0a840); } .io-layer-rate { font-size: 12px; color: var(--muted); font-family: var(--font-mono); } .io-layer-rate span { color: var(--text); font-weight: 600; } .io-flow-arrow { font-size: 28px; color: var(--muted); opacity: 0.5; flex-shrink: 0; } .io-flow-meta { margin-top: 8px; font-size: 11px; color: var(--muted); font-family: var(--font-mono); } @media (max-width: 700px) { .io-flow-grid { flex-direction: column; } .io-flow-arrow { transform: rotate(90deg); } } /* ============================================================================ POPULATIONEN ÜBERSICHT ============================================================================ */ .population-panel { padding: 20px; margin-top: 14px; } .population-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 12px; margin-top: 16px; } .population-card { background: #050d14; border: 1px solid #16394b; border-radius: 10px; padding: 14px; transition: border-color 0.2s ease; } .population-card:hover { border-color: rgba(255,255,255,0.15); } .population-card-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 10px; padding-bottom: 8px; border-bottom: 1px solid rgba(142,178,193,0.12); } .population-name { font-weight: 600; font-size: 14px; text-transform: capitalize; } .population-count { font-size: 12px; color: var(--muted); font-family: var(--font-mono); } .population-stats { display: grid; gap: 6px; } .population-stat { display: flex; justify-content: space-between; font-size: 12px; } .population-stat dt { color: var(--muted); } .population-stat dd { margin: 0; font-family: var(--font-mono); font-weight: 500; } .population-bar { height: 6px; background: #07141e; border-radius: 999px; overflow: hidden; margin-top: 8px; } .population-bar-fill { height: 100%; border-radius: 999px; transition: width 0.5s ease; } .population-empty { grid-column: 1 / -1; text-align: center; padding: 30px; color: var(--muted); font-size: 13px; } .population-meta { margin-top: 8px; font-size: 11px; color: var(--muted); font-family: var(--font-mono); } /* ============================================================================ DYNAMICS TAB - Spike Raster, Histogram, Layer Explorer ============================================================================ */ .raster-panel, .histogram-panel, .layer-explorer-panel { padding: 20px; margin-top: 14px; } #spike-raster, #rate-histogram, #layer-canvas { width: 100%; display: block; background: #050d14; border-radius: 12px; border: 1px solid #16394b; margin-top: 12px; } #spike-raster { height: 380px; } #rate-histogram { height: 300px; } #layer-canvas { height: 400px; max-width: 400px; margin: 12px auto; } .layer-controls { display: flex; gap: 16px; flex-wrap: wrap; margin-top: 12px; padding: 12px 16px; background: #050d14; border-radius: 10px; border: 1px solid #16394b; align-items: center; } .layer-controls label { display: flex; align-items: center; gap: 8px; font-size: 12px; color: var(--muted); } .layer-controls select, .layer-controls input[type='range'] { background: #0a1823; border: 1px solid var(--line); color: var(--text); border-radius: 6px; padding: 4px 8px; font-family: var(--font-mono); font-size: 12px; } .layer-controls input[type='range'] { width: 120px; padding: 0; accent-color: var(--accent2); } #layer-value { font-family: var(--font-mono); font-size: 12px; color: var(--accent2); min-width: 30px; text-align: center; } /* ============================================================================ RELEASE TREE ============================================================================ */ .release-board { display: flex; flex-direction: column; gap: 1.5rem; } .release-header h2 { margin: 0 0 0.25rem 0; } .release-subtitle { color: var(--muted); margin: 0; font-size: 0.9rem; } .release-tree { background: var(--bg); border: 1px solid var(--line); border-radius: var(--radius-medium); padding: 1rem; } .release-tree-list { display: flex; flex-direction: column; gap: 0.75rem; position: relative; } .release-tree-node { border-left: 3px solid var(--line); padding: 0.75rem 1rem; background: rgba(255, 255, 255, 0.02); border-radius: 0 var(--radius-small) var(--radius-small) 0; } .release-tree-node.release-released { border-left-color: var(--color-success); } .release-tree-node.release-current { border-left-color: var(--color-primary); background: rgba(74, 124, 247, 0.08); } .release-node-header { display: flex; align-items: center; gap: 0.6rem; flex-wrap: wrap; margin-bottom: 0.4rem; } .release-node-version { font-weight: 600; font-size: 1rem; color: var(--text); } .release-node-status { font-size: 0.72rem; text-transform: uppercase; letter-spacing: 0.05em; padding: 2px 8px; border-radius: 12px; background: rgba(255, 255, 255, 0.08); color: var(--muted); } .release-status-released { background: rgba(36, 180, 110, 0.15) !important; color: var(--color-success) !important; } .release-status-current { background: rgba(74, 124, 247, 0.2) !important; color: var(--color-primary) !important; } .release-node-body { font-size: 0.85rem; color: var(--muted); } .release-node-body p { margin: 0.25rem 0 0 0; } .release-node-meta { font-family: var(--font-mono); font-size: 0.78rem; opacity: 0.8; } .release-node-note { font-style: italic; color: var(--color-warning); } .release-timeline-panel { border-top: 1px solid var(--line); padding-top: 1.25rem; } .release-timeline-header { display: flex; align-items: flex-end; justify-content: space-between; gap: 1rem; margin-bottom: 0.8rem; } .release-timeline-header h2 { margin: 0.2rem 0 0.25rem; } .release-timeline-count { color: var(--color-primary); font-family: var(--font-mono); font-size: 0.72rem; white-space: nowrap; } .release-timeline-sources, .release-timeline-tags { display: flex; flex-wrap: wrap; gap: 0.4rem; } .release-timeline-sources { margin-bottom: 1rem; } .release-timeline-source, .release-timeline-tags span { border: 1px solid var(--line); border-radius: 999px; color: var(--muted); font-family: var(--font-mono); font-size: 0.66rem; letter-spacing: 0.04em; padding: 0.18rem 0.45rem; } .release-timeline-source.is-available { color: var(--color-success); } .release-timeline-source.is-missing { color: var(--color-warning); } .release-timeline-list { display: block; } .release-timeline-phase-summary { display: grid; gap: 0.7rem; grid-template-columns: repeat(3, minmax(0, 1fr)); margin-bottom: 1.2rem; } .release-timeline-phase-summary-item { border-left: 3px solid var(--color-primary); background: rgba(255, 255, 255, 0.025); padding: 0.65rem 0.8rem; } .release-timeline-phase-summary-item span, .release-timeline-phase-summary-item small { display: block; } .release-timeline-phase-summary-item span { font-weight: 600; } .release-timeline-phase-summary-item strong { color: var(--color-primary); display: block; font-family: var(--font-mono); font-size: 1.1rem; margin-top: 0.2rem; } .release-timeline-phase-summary-item small { color: var(--muted); font-size: 0.68rem; margin-top: 0.15rem; } .release-timeline-phase-summary-item.release-timeline-phase-past { border-left-color: var(--color-success); } .release-timeline-phase-summary-item.release-timeline-phase-past strong { color: var(--color-success); } .release-timeline-phase-summary-item.release-timeline-phase-future { border-left-color: var(--color-warning); } .release-timeline-phase-summary-item.release-timeline-phase-future strong { color: var(--color-warning); } .release-timeline-chronological { border-left: 1px solid rgba(103, 211, 225, 0.35); display: flex; flex-direction: column; gap: 0.8rem; margin-left: 0.55rem; padding-left: 1.4rem; } .release-timeline-phase { min-width: 0; } .release-timeline-phase-header { align-items: center; border-top: 2px solid var(--color-primary); display: flex; justify-content: space-between; margin-bottom: 0.7rem; padding-top: 0.55rem; } .release-timeline-phase-header h3 { font-size: 0.95rem; margin: 0; } .release-timeline-phase-header span { color: var(--muted); display: block; font-size: 0.68rem; margin-top: 0.15rem; } .release-timeline-phase-header strong { color: var(--color-primary); font-family: var(--font-mono); font-size: 0.8rem; } .release-timeline-phase-past .release-timeline-phase-header { border-top-color: var(--color-success); } .release-timeline-phase-past .release-timeline-phase-header strong { color: var(--color-success); } .release-timeline-phase-future .release-timeline-phase-header { border-top-color: var(--color-warning); } .release-timeline-phase-future .release-timeline-phase-header strong { color: var(--color-warning); } .release-timeline-phase-list { border-left: 1px solid rgba(103, 211, 225, 0.35); display: flex; flex-direction: column; gap: 0.8rem; margin-left: 0.55rem; padding-left: 1.4rem; } .release-timeline-phase-badge { border: 1px solid var(--line); border-radius: 999px; display: inline-block; font-family: var(--font-mono); font-size: 0.64rem; margin-top: 0.45rem; padding: 0.15rem 0.4rem; } .release-timeline-phase-badge-past { color: var(--color-success); } .release-timeline-phase-badge-current { color: var(--color-primary); } .release-timeline-phase-badge-future { color: var(--color-warning); } .release-preview-content { border-left: 3px solid var(--color-primary); background: rgba(255, 255, 255, 0.025); padding: 1rem 1.2rem; } .release-preview-header { align-items: center; display: flex; justify-content: space-between; gap: 1rem; } .release-preview-header > div { align-items: center; display: flex; gap: 0.6rem; } .release-preview-content h3 { margin: 1rem 0 0.35rem; } .release-preview-note { color: var(--muted); max-width: 80ch; } .release-preview-content ul { color: var(--text); line-height: 1.5; margin-bottom: 0; } .release-preview-gate { color: var(--color-warning); font-family: var(--font-mono); font-size: 0.74rem; } .release-documents-grid { display: grid; gap: 1rem; grid-template-columns: repeat(3, minmax(0, 1fr)); } .release-document-card { border: 1px solid var(--line); border-radius: var(--radius-small); min-width: 0; overflow: hidden; } .release-document-card header { align-items: center; background: rgba(255, 255, 255, 0.04); display: flex; justify-content: space-between; padding: 0.65rem 0.8rem; } .release-document-card h3 { font-size: 0.9rem; margin: 0; } .release-document-card a { color: var(--color-primary); font-size: 0.7rem; } .release-document-card pre { color: var(--muted); font-family: var(--font-mono); font-size: 0.68rem; line-height: 1.45; margin: 0; max-height: 38rem; overflow: auto; padding: 0.8rem; white-space: pre-wrap; } .release-timeline-entry { position: relative; } .release-timeline-marker { background: var(--color-primary); border: 3px solid var(--bg); border-radius: 50%; box-shadow: 0 0 0 1px var(--color-primary); height: 0.7rem; left: -1.78rem; position: absolute; top: 0.2rem; width: 0.7rem; } .release-timeline-entry.is-undated .release-timeline-marker { background: var(--muted); box-shadow: 0 0 0 1px var(--muted); } .release-timeline-date { color: var(--color-primary); font-family: var(--font-mono); font-size: 0.7rem; letter-spacing: 0.05em; text-transform: uppercase; } .release-timeline-content { background: rgba(255, 255, 255, 0.025); border: 1px solid var(--line); border-radius: var(--radius-small); margin-top: 0.3rem; padding: 0.8rem 1rem; } .release-timeline-entry-header { align-items: baseline; display: flex; gap: 0.8rem; justify-content: space-between; } .release-timeline-entry-header h3 { font-size: 0.95rem; margin: 0; } .release-timeline-progress { color: var(--color-success); font-family: var(--font-mono); font-size: 0.68rem; white-space: nowrap; } .release-timeline-tags { margin-top: 0.45rem; } .release-timeline-content ul { color: var(--muted); display: grid; gap: 0.28rem; list-style: none; margin: 0.65rem 0 0; padding: 0; } .release-timeline-content li { display: flex; font-size: 0.82rem; gap: 0.45rem; line-height: 1.35; } .release-timeline-content li.is-done { color: var(--text); } .timeline-item-mark { color: var(--color-primary); flex: 0 0 0.8rem; font-family: var(--font-mono); text-align: center; } .release-timeline-more, .release-timeline-empty { color: var(--muted); font-size: 0.75rem; margin: 0.65rem 0 0; } @media (max-width: 520px) { .release-timeline-phase-summary, .release-documents-grid { grid-template-columns: 1fr; } .release-timeline-header, .release-timeline-entry-header { align-items: flex-start; flex-direction: column; gap: 0.35rem; } } /* ============================================================================ SHARED EMBODIMENT LANGUAGE ============================================================================ */ .tab-content > .workspace-header, .overview-command-bar { border-color: rgba(103, 211, 225, .28); background: linear-gradient(115deg, rgba(8, 31, 43, .96), rgba(18, 24, 37, .92)), repeating-linear-gradient(90deg, transparent 0 31px, rgba(103, 211, 225, .035) 32px); box-shadow: inset 0 0 32px rgba(0, 0, 0, .18); } .card, .control-card, .overview-surface, .research-focus-rail article { border-radius: 7px; border-color: rgba(103, 211, 225, .2); background: rgba(5, 20, 31, .82); box-shadow: 0 8px 22px rgba(0, 0, 0, .16), inset 0 0 28px rgba(35, 126, 143, .035); } .tab-btn.active, .workspace-view-tabs button.active, .research-lanes button.active { background: rgba(61, 205, 196, .16); color: #a4fff0; box-shadow: inset 0 -2px #4fe4d5; } .research-focus-rail { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px; margin: 8px 0; } .research-focus-rail article { display: grid; gap: 4px; min-width: 0; padding: 11px 13px; } .research-focus-rail span { color: #6dd9e0; font: 700 8px var(--font-mono); letter-spacing: .1em; } .research-focus-rail strong { color: #efffff; font-size: 13px; } .research-focus-rail small { color: #8298a6; font: 9px var(--font-mono); } /* Network keeps one live canvas; expensive secondary views remain opt-in code paths. */ #tab-network > [data-network-view="dynamics"], #tab-network > [data-network-view="inspect"], #tab-network > [data-network-view="data"], #tab-network #network-flow, #tab-network #network-populations, #tab-network .workspace-view-tabs { display: none !important; } #tab-network.active { display: grid; grid-template-rows: auto minmax(0, 1fr); gap: 8px; } #tab-network #network-projection { min-height: 0; margin: 0; border-color: rgba(103, 211, 225, .3); background: radial-gradient(circle at 50% 45%, rgba(66, 205, 192, .1), transparent 42%), rgba(3, 17, 27, .9); } #tab-network .heatmap-split { grid-template-columns: 1fr; } #tab-network .projection-wrap { display: none; } #tab-network #heatmap { height: min(58vh, 560px); } @media (max-width: 680px) { .research-focus-rail { grid-template-columns: 1fr; } #tab-network #heatmap { height: 52vh; } } /* Network is retired from the operator surface; its key signals live in the footer. */ #tab-network { display: none !important; } /* Brain-5D unified file viewer modal */ body.fm-viewer-open { overflow: hidden; } .fm-viewer.fm-viewer-modal:not(.fm-viewer-hidden) { position: fixed !important; inset: 3vh 3vw !important; z-index: 20000 !important; display: flex !important; flex-direction: column; width: auto !important; max-width: none !important; height: 94vh !important; max-height: 94vh !important; background: var(--panel-bg, #10151f); border: 1px solid var(--border, #334155); border-radius: 14px; box-shadow: 0 0 0 100vmax rgba(0, 0, 0, 0.68), 0 24px 80px rgba(0, 0, 0, 0.55); overflow: hidden !important; } .fm-viewer.fm-viewer-modal .fm-content, .fm-viewer.fm-viewer-modal .fm-docx-viewer, .fm-viewer.fm-viewer-modal .fm-sheet-viewer, .fm-viewer.fm-viewer-modal .fm-pdf-container { flex: 1 1 auto; min-height: 0; overflow: auto; } .fm-viewer.fm-viewer-modal .fm-file-header { position: sticky; top: 0; z-index: 3; } .fm-math { display: inline-block; padding: 0.08rem 0.28rem; border-radius: 4px; font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; background: rgba(127, 127, 127, 0.12); white-space: nowrap; } .workflow-popup-actions { display: inline-flex; gap: 0.3rem; align-items: center; } /* Final responsive guardrails. These rules deliberately come last so legacy workspace fragments cannot reintroduce clipping or fixed viewport canvases. */ [hidden] { display: none !important; } .experience-ready .dashboard-utility-bar, .experience-ready .experience-ribbon, .experience-ready .experience-welcome { display: none !important; } #tab-research .fm-layout { height: min(68vh, 760px); min-height: 420px; max-height: none; } #tab-research .fm-tree, #tab-research .fm-viewer, #tab-settings .parameter-table-wrap, #tab-control .console-output { max-height: min(58vh, 720px); overflow: auto; } #tab-control .console-output { min-height: 180px; } .wesen-stage-card { min-height: clamp(520px, 62vh, 760px); } .wesen-stage { min-height: clamp(360px, 52vh, 620px); } .modal-content, .research-chat-dialog, .embodiment-detail-dialog, .gate-detail-dialog, .context-help { max-height: calc(100dvh - 24px); overflow: auto; } .research-chat-dialog { width: min(1440px, calc(100vw - 24px)); height: min(900px, calc(100dvh - 24px)); } body[data-theme="light"] .experience-ready .topbar-brand h1, body[data-theme="light"] .experience-ready .topbar-brand .eyebrow, body[data-theme="light"] .experience-ready .topbar-right > .header-context { color: #10242f !important; text-shadow: none; } /* Fixed footer contract: reserve its responsive height in the document while keeping the live status bar attached to the viewport edge. */ :root { --dashboard-footer-space: 116px; } body.experience-ready { padding-bottom: var(--dashboard-footer-space); } body.experience-ready main { padding-bottom: calc(48px + var(--dashboard-footer-space)); } body.experience-ready .site-footer { position: fixed !important; right: 0; bottom: 0; left: 0; z-index: 40; margin: 0 !important; padding-bottom: max(1px, env(safe-area-inset-bottom)); } @media (max-width: 1080px) { :root { --dashboard-footer-space: 174px; } } @media (max-width: 680px) { :root { --dashboard-footer-space: 334px; } } /* Fixed application chrome: the header and the three primary areas stay together at the top while only the workspace content scrolls. */ :root { --dashboard-header-height: 76px; --dashboard-primary-nav-height: 78px; } body.experience-ready .topbar { position: fixed !important; top: 0; right: 0; left: 0; z-index: 60; } body.experience-ready .brain5d-primary-nav { position: fixed !important; top: var(--dashboard-header-height); right: 0; left: 0; z-index: 55; width: 100%; margin: 0; border-right: 0; border-left: 0; border-radius: 0; } body.experience-ready main { padding-top: calc(var(--dashboard-header-height) + var(--dashboard-primary-nav-height) + 16px); } /* Wissenschaft routes the Network workbench contextually. Keep inactive tabs hidden, but never hide the selected Network workspace itself. */ #tab-network:not(.active) { display: none !important; } #tab-network.active { display: grid !important; } #tab-network.active .workspace-view-tabs { display: flex !important; } #tab-network.active > [data-network-view="dynamics"]:not([hidden]), #tab-network.active > [data-network-view="inspect"]:not([hidden]), #tab-network.active > [data-network-view="data"]:not([hidden]), #tab-network.active #network-flow, #tab-network.active #network-populations { display: block !important; } @media (max-width: 680px) { body.experience-ready main { padding-top: calc(var(--dashboard-header-height) + var(--dashboard-primary-nav-height) + 10px); } } /* Runtime & Wesen raster. The symbiosis interface is a full-width row instead of being squeezed into the next available grid column. */ #tab-wesen .wesen-layout { display: grid; grid-template-columns: minmax(220px, .8fr) minmax(0, 1.8fr) minmax(220px, .8fr); grid-template-areas: "left stage right" "symbiosis symbiosis symbiosis"; gap: var(--content-gap); align-items: start; } #tab-wesen .wesen-layout > .wesen-sidebar:first-child { grid-area: left; } #tab-wesen .wesen-layout > .wesen-stage-card { grid-area: stage; min-width: 0; } #tab-wesen .wesen-layout > .wesen-sidebar:nth-child(3) { grid-area: right; } #tab-wesen .wesen-layout > .wesen-symbiosis-card { grid-area: symbiosis; min-width: 0; width: 100%; } #tab-wesen .wesen-symbiosis-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); align-items: stretch; } #tab-wesen .wesen-symbiosis-card article, #tab-wesen .wesen-symbiosis-list, #tab-wesen .wesen-symbiosis-gateway { min-width: 0; overflow: hidden; } #tab-wesen .wesen-symbiosis-card strong, #tab-wesen .wesen-symbiosis-card small, #tab-wesen .wesen-symbiosis-card p, #tab-wesen .wesen-symbiosis-card span { overflow-wrap: anywhere; } @media (max-width: 1180px) { #tab-wesen .wesen-layout { grid-template-columns: minmax(220px, 1fr) minmax(220px, 1fr); grid-template-areas: "stage stage" "left right" "symbiosis symbiosis"; } #tab-wesen .wesen-symbiosis-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } } @media (max-width: 720px) { #tab-wesen .wesen-layout { display: grid; grid-template-columns: minmax(0, 1fr); grid-template-areas: "stage" "left" "right" "symbiosis"; } #tab-wesen .wesen-symbiosis-grid { grid-template-columns: minmax(0, 1fr); } #tab-wesen .wesen-stage-card { min-height: 0; } #tab-wesen .wesen-stage { min-height: min(560px, 70vh); } } /* Full-page workspaces and shared box sizing controls. */ body.experience-ready .tab-content.active { min-height: calc(100dvh - var(--dashboard-header-height) - var(--dashboard-primary-nav-height) - var(--dashboard-footer-space)); } body.experience-ready .box-state-header { display: flex; align-items: flex-start; justify-content: space-between; gap: 10px; } .box-state-tools { display: inline-flex; flex: 0 0 auto; align-items: center; gap: 3px; margin-left: auto; } .box-state-button { display: inline-grid; width: 27px; height: 27px; min-width: 27px; min-height: 27px; place-items: center; padding: 0; border: 1px solid var(--line-soft); border-radius: var(--control-radius); background: var(--surface-2); color: var(--muted); cursor: pointer; font: 700 .8rem/1 var(--font-ui); } .box-state-button:hover, .box-state-button:focus-visible, .box-state-button[aria-pressed="true"] { border-color: var(--status-info); color: var(--status-info); background: rgba(85, 201, 232, .14); } .box-state-minimized { min-height: 0 !important; } .box-state-minimized > .box-state-content { display: none !important; } body.box-state-lock { overflow: hidden !important; } .box-state-maximized { position: fixed !important; top: 12px !important; right: 12px !important; bottom: 12px !important; left: 12px !important; z-index: 90 !important; width: auto !important; max-width: none !important; max-height: none !important; margin: 0 !important; overflow: auto !important; background: var(--surface-1) !important; box-shadow: 0 0 0 100vmax rgba(0, 7, 13, .74), 0 24px 80px rgba(0, 0, 0, .5) !important; } .box-state-maximized > .box-state-content { min-width: 0; } @media (max-width: 680px) { .box-state-maximized { top: 8px !important; right: 8px !important; bottom: 8px !important; left: 8px !important; } .box-state-tools { gap: 2px; } .box-state-button { width: 30px; height: 30px; min-width: 30px; min-height: 30px; } } @media (max-width: 680px) { #tab-research .fm-layout { height: min(72vh, 620px); min-height: 360px; } .wesen-stage-card { min-height: 0; } .wesen-stage { min-height: 420px; } .modal-content, .research-chat-dialog { width: calc(100vw - 16px); height: calc(100dvh - 16px); max-height: calc(100dvh - 16px); } }