github-actions[bot]
Sync: publish Space API fix
5e0b58b
Raw History Blame Contribute Delete
224 kB
/* 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);
}
}