Some checks failed
CI / Frontend Lint (push) Failing after 6s
CI / Frontend Type Check (push) Failing after 6s
CI / Frontend Build (push) Failing after 6s
CI / Frontend E2E Tests (push) Failing after 9s
CI / Orchestrator Build (push) Failing after 6s
CI / Contracts Compile (push) Failing after 6s
CI / Contracts Test (push) Failing after 6s
Security Scan / Dependency Vulnerability Scan (push) Failing after 4s
Security Scan / OWASP ZAP Scan (push) Failing after 4s
3947 lines
87 KiB
CSS
3947 lines
87 KiB
CSS
/* ═══════════════════════════════════════════════════════════════
|
|
TransactFlow — IDE-Style Transaction Builder
|
|
Dark theme professional workspace
|
|
═══════════════════════════════════════════════════════════════ */
|
|
|
|
:root {
|
|
--bg-base: #0e0e10;
|
|
--bg-surface: #141418;
|
|
--bg-elevated: #1a1a20;
|
|
--bg-hover: #22222a;
|
|
--bg-active: #2a2a34;
|
|
--bg-input: #18181e;
|
|
--border: #2a2a32;
|
|
--border-subtle: #222228;
|
|
--text-primary: #e4e4e8;
|
|
--text-secondary: #9898a4;
|
|
--text-muted: #5c5c68;
|
|
--accent-blue: #3b82f6;
|
|
--accent-green: #22c55e;
|
|
--accent-yellow: #eab308;
|
|
--accent-red: #ef4444;
|
|
--accent-purple: #a855f7;
|
|
--accent-orange: #f97316;
|
|
--title-bar-height: 40px;
|
|
--activity-bar-width: 48px;
|
|
--status-bar-height: 24px;
|
|
--font-mono: 'SF Mono', 'Cascadia Code', 'Fira Code', 'JetBrains Mono', 'Consolas', monospace;
|
|
--font-sans: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Inter', Roboto, sans-serif;
|
|
--radius-sm: 4px;
|
|
--radius-md: 6px;
|
|
--radius-lg: 8px;
|
|
}
|
|
|
|
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
|
|
|
|
html, body, #root {
|
|
height: 100%;
|
|
width: 100%;
|
|
overflow: hidden;
|
|
font-family: var(--font-sans);
|
|
font-size: 13px;
|
|
color: var(--text-primary);
|
|
background: var(--bg-base);
|
|
-webkit-font-smoothing: antialiased;
|
|
}
|
|
|
|
/* Scrollbar */
|
|
::-webkit-scrollbar { width: 6px; height: 6px; }
|
|
::-webkit-scrollbar-track { background: transparent; }
|
|
::-webkit-scrollbar-thumb { background: #333; border-radius: 3px; }
|
|
::-webkit-scrollbar-thumb:hover { background: #444; }
|
|
|
|
/* ─── APP SHELL ─────────────────────────────────────────────── */
|
|
.app-shell {
|
|
display: flex;
|
|
flex-direction: column;
|
|
height: 100vh;
|
|
width: 100vw;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.app-body {
|
|
display: flex;
|
|
flex: 1;
|
|
min-height: 0;
|
|
overflow: hidden;
|
|
}
|
|
|
|
/* ─── TITLE BAR ─────────────────────────────────────────────── */
|
|
.title-bar {
|
|
height: var(--title-bar-height);
|
|
background: var(--bg-surface);
|
|
border-bottom: 1px solid var(--border);
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
padding: 0 12px;
|
|
gap: 12px;
|
|
-webkit-app-region: drag;
|
|
user-select: none;
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
.title-bar-left, .title-bar-right {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
.title-bar-center {
|
|
flex: 1;
|
|
display: flex;
|
|
justify-content: center;
|
|
max-width: 480px;
|
|
margin: 0 auto;
|
|
}
|
|
|
|
.title-bar-logo {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 6px;
|
|
}
|
|
|
|
.title-bar-name {
|
|
font-weight: 700;
|
|
font-size: 13px;
|
|
color: var(--text-primary);
|
|
letter-spacing: -0.3px;
|
|
}
|
|
|
|
.title-bar-workspace {
|
|
font-size: 12px;
|
|
color: var(--text-secondary);
|
|
}
|
|
|
|
.title-bar-separator {
|
|
width: 1px;
|
|
height: 16px;
|
|
background: var(--border);
|
|
}
|
|
|
|
.title-bar-search {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
background: var(--bg-input);
|
|
border: 1px solid var(--border);
|
|
border-radius: var(--radius-md);
|
|
padding: 5px 12px;
|
|
color: var(--text-muted);
|
|
font-size: 12px;
|
|
cursor: pointer;
|
|
width: 100%;
|
|
transition: border-color 0.15s;
|
|
}
|
|
|
|
.title-bar-search:hover {
|
|
border-color: var(--text-muted);
|
|
}
|
|
|
|
.title-bar-search kbd {
|
|
margin-left: auto;
|
|
font-size: 10px;
|
|
font-family: var(--font-mono);
|
|
background: var(--bg-elevated);
|
|
border: 1px solid var(--border);
|
|
border-radius: 3px;
|
|
padding: 1px 5px;
|
|
color: var(--text-muted);
|
|
}
|
|
|
|
.mode-selector {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 6px;
|
|
padding: 3px 10px;
|
|
border-radius: var(--radius-sm);
|
|
cursor: pointer;
|
|
font-size: 12px;
|
|
color: var(--text-secondary);
|
|
position: relative;
|
|
transition: background 0.15s;
|
|
}
|
|
|
|
.mode-selector:hover { background: var(--bg-hover); }
|
|
|
|
.mode-dot {
|
|
width: 7px;
|
|
height: 7px;
|
|
border-radius: 50%;
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
.mode-dropdown {
|
|
position: absolute;
|
|
top: 100%;
|
|
left: 0;
|
|
margin-top: 4px;
|
|
background: var(--bg-elevated);
|
|
border: 1px solid var(--border);
|
|
border-radius: var(--radius-md);
|
|
padding: 4px;
|
|
z-index: 100;
|
|
min-width: 160px;
|
|
box-shadow: 0 8px 24px rgba(0,0,0,0.4);
|
|
}
|
|
|
|
.mode-option {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
padding: 6px 10px;
|
|
border-radius: var(--radius-sm);
|
|
cursor: pointer;
|
|
font-size: 12px;
|
|
color: var(--text-secondary);
|
|
transition: background 0.1s;
|
|
}
|
|
|
|
.mode-option:hover { background: var(--bg-hover); color: var(--text-primary); }
|
|
.mode-option.active { background: var(--bg-active); color: var(--text-primary); }
|
|
|
|
.title-bar-action {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 5px;
|
|
padding: 4px 12px;
|
|
border-radius: var(--radius-sm);
|
|
border: 1px solid transparent;
|
|
font-size: 12px;
|
|
font-weight: 500;
|
|
cursor: pointer;
|
|
transition: all 0.15s;
|
|
background: transparent;
|
|
color: var(--text-secondary);
|
|
}
|
|
|
|
.title-bar-action.validate {
|
|
color: var(--accent-green);
|
|
border-color: var(--accent-green)30;
|
|
}
|
|
.title-bar-action.validate:hover { background: rgba(34,197,94,0.1); }
|
|
|
|
.title-bar-action.simulate {
|
|
color: var(--accent-blue);
|
|
border-color: var(--accent-blue)30;
|
|
}
|
|
.title-bar-action.simulate:hover { background: rgba(59,130,246,0.1); }
|
|
|
|
.title-bar-action.execute {
|
|
color: #fff;
|
|
background: var(--accent-blue);
|
|
border-color: var(--accent-blue);
|
|
}
|
|
.title-bar-action.execute:hover { background: #2563eb; }
|
|
|
|
.icon-btn {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
width: 28px;
|
|
height: 28px;
|
|
border-radius: var(--radius-sm);
|
|
border: none;
|
|
background: transparent;
|
|
color: var(--text-secondary);
|
|
cursor: pointer;
|
|
position: relative;
|
|
transition: all 0.15s;
|
|
}
|
|
|
|
.icon-btn:hover { background: var(--bg-hover); color: var(--text-primary); }
|
|
|
|
.notification-badge {
|
|
position: absolute;
|
|
top: 2px;
|
|
right: 2px;
|
|
width: 14px;
|
|
height: 14px;
|
|
background: var(--accent-red);
|
|
color: #fff;
|
|
border-radius: 50%;
|
|
font-size: 9px;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
font-weight: 600;
|
|
}
|
|
|
|
/* ─── ACTIVITY BAR ──────────────────────────────────────────── */
|
|
.activity-bar {
|
|
width: var(--activity-bar-width);
|
|
background: var(--bg-surface);
|
|
border-right: 1px solid var(--border);
|
|
display: flex;
|
|
flex-direction: column;
|
|
justify-content: space-between;
|
|
padding: 4px 0;
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
.activity-bar-top, .activity-bar-bottom {
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: center;
|
|
gap: 2px;
|
|
}
|
|
|
|
.activity-btn {
|
|
width: 40px;
|
|
height: 40px;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
border-radius: var(--radius-md);
|
|
border: none;
|
|
background: transparent;
|
|
color: var(--text-muted);
|
|
cursor: pointer;
|
|
position: relative;
|
|
transition: all 0.15s;
|
|
}
|
|
|
|
.activity-btn:hover { color: var(--text-secondary); background: var(--bg-hover); }
|
|
.activity-btn.active {
|
|
color: var(--text-primary);
|
|
background: var(--bg-active);
|
|
}
|
|
.activity-btn.active::before {
|
|
content: '';
|
|
position: absolute;
|
|
left: -4px;
|
|
top: 8px;
|
|
bottom: 8px;
|
|
width: 2px;
|
|
background: var(--accent-blue);
|
|
border-radius: 1px;
|
|
}
|
|
|
|
/* ─── WORKSPACE ─────────────────────────────────────────────── */
|
|
.workspace {
|
|
flex: 1;
|
|
display: flex;
|
|
flex-direction: column;
|
|
min-width: 0;
|
|
min-height: 0;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.workspace-upper {
|
|
flex: 1;
|
|
display: flex;
|
|
min-height: 0;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.panel-divider.vertical {
|
|
width: 1px;
|
|
background: var(--border);
|
|
cursor: col-resize;
|
|
flex-shrink: 0;
|
|
transition: background 0.15s;
|
|
}
|
|
|
|
.panel-divider.vertical:hover { background: var(--accent-blue); }
|
|
|
|
.panel-divider.horizontal {
|
|
height: 1px;
|
|
background: var(--border);
|
|
cursor: row-resize;
|
|
flex-shrink: 0;
|
|
transition: background 0.15s;
|
|
}
|
|
|
|
.panel-divider.horizontal:hover { background: var(--accent-blue); }
|
|
|
|
/* ─── LEFT PANEL ────────────────────────────────────────────── */
|
|
.left-panel {
|
|
background: var(--bg-surface);
|
|
display: flex;
|
|
flex-direction: column;
|
|
min-width: 0;
|
|
flex-shrink: 0;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.panel-header {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
padding: 8px 12px;
|
|
border-bottom: 1px solid var(--border-subtle);
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
.panel-title {
|
|
font-size: 11px;
|
|
font-weight: 600;
|
|
text-transform: uppercase;
|
|
letter-spacing: 0.5px;
|
|
color: var(--text-secondary);
|
|
}
|
|
|
|
.left-panel-search {
|
|
padding: 8px 12px;
|
|
position: relative;
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
.left-panel-search .search-icon {
|
|
position: absolute;
|
|
left: 20px;
|
|
top: 50%;
|
|
transform: translateY(-50%);
|
|
color: var(--text-muted);
|
|
}
|
|
|
|
.left-panel-search input {
|
|
width: 100%;
|
|
background: var(--bg-input);
|
|
border: 1px solid var(--border);
|
|
border-radius: var(--radius-sm);
|
|
padding: 6px 8px 6px 30px;
|
|
font-size: 12px;
|
|
color: var(--text-primary);
|
|
outline: none;
|
|
transition: border-color 0.15s;
|
|
}
|
|
|
|
.left-panel-search input:focus { border-color: var(--accent-blue); }
|
|
.left-panel-search input::placeholder { color: var(--text-muted); }
|
|
|
|
.left-panel-filters {
|
|
display: flex;
|
|
gap: 2px;
|
|
padding: 0 12px 8px;
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
.filter-btn {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 4px;
|
|
padding: 3px 8px;
|
|
border-radius: var(--radius-sm);
|
|
border: none;
|
|
background: transparent;
|
|
color: var(--text-muted);
|
|
font-size: 11px;
|
|
cursor: pointer;
|
|
transition: all 0.15s;
|
|
}
|
|
|
|
.filter-btn:hover { background: var(--bg-hover); color: var(--text-secondary); }
|
|
.filter-btn.active { background: var(--bg-active); color: var(--text-primary); }
|
|
|
|
.left-panel-content {
|
|
flex: 1;
|
|
overflow-y: auto;
|
|
padding-bottom: 8px;
|
|
}
|
|
|
|
.component-category { margin-bottom: 2px; }
|
|
|
|
.category-header {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 6px;
|
|
padding: 6px 12px;
|
|
cursor: pointer;
|
|
color: var(--text-secondary);
|
|
font-size: 12px;
|
|
font-weight: 500;
|
|
transition: background 0.1s;
|
|
user-select: none;
|
|
}
|
|
|
|
.category-header:hover { background: var(--bg-hover); }
|
|
|
|
.category-icon { font-size: 13px; }
|
|
|
|
.category-label { flex: 1; }
|
|
|
|
.category-count {
|
|
font-size: 10px;
|
|
color: var(--text-muted);
|
|
background: var(--bg-active);
|
|
padding: 1px 6px;
|
|
border-radius: 8px;
|
|
}
|
|
|
|
.category-items { padding: 2px 0; }
|
|
.category-items.flat { padding: 2px 0; }
|
|
|
|
.component-item {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 6px;
|
|
padding: 5px 12px 5px 24px;
|
|
cursor: grab;
|
|
color: var(--text-secondary);
|
|
font-size: 12px;
|
|
transition: all 0.1s;
|
|
user-select: none;
|
|
}
|
|
|
|
.component-item:hover {
|
|
background: var(--bg-hover);
|
|
color: var(--text-primary);
|
|
}
|
|
|
|
.component-item:active { cursor: grabbing; }
|
|
|
|
.drag-handle {
|
|
color: var(--text-muted);
|
|
flex-shrink: 0;
|
|
opacity: 0;
|
|
transition: opacity 0.15s;
|
|
}
|
|
|
|
.component-item:hover .drag-handle { opacity: 1; }
|
|
|
|
.component-icon { font-size: 14px; flex-shrink: 0; }
|
|
.component-label { flex: 1; }
|
|
|
|
.component-category-badge {
|
|
font-size: 10px;
|
|
opacity: 0.7;
|
|
}
|
|
|
|
.fav-btn {
|
|
border: none;
|
|
background: transparent;
|
|
color: var(--text-muted);
|
|
cursor: pointer;
|
|
padding: 2px;
|
|
border-radius: 2px;
|
|
opacity: 0;
|
|
transition: all 0.15s;
|
|
display: flex;
|
|
align-items: center;
|
|
}
|
|
|
|
.component-item:hover .fav-btn { opacity: 1; }
|
|
.fav-btn.active { opacity: 1; color: var(--accent-yellow); }
|
|
.fav-btn:hover { color: var(--accent-yellow); }
|
|
|
|
.empty-state {
|
|
padding: 24px;
|
|
text-align: center;
|
|
color: var(--text-muted);
|
|
font-size: 12px;
|
|
}
|
|
|
|
/* ─── CANVAS ────────────────────────────────────────────────── */
|
|
.canvas-container {
|
|
display: flex;
|
|
flex-direction: column;
|
|
height: 100%;
|
|
width: 100%;
|
|
}
|
|
|
|
.canvas-region {
|
|
flex: 1;
|
|
min-width: 0;
|
|
min-height: 0;
|
|
position: relative;
|
|
}
|
|
|
|
.canvas-header {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
padding: 6px 14px;
|
|
background: var(--bg-surface);
|
|
border-bottom: 1px solid var(--border-subtle);
|
|
flex-shrink: 0;
|
|
gap: 12px;
|
|
}
|
|
|
|
.canvas-header-left, .canvas-header-right, .canvas-header-center {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
}
|
|
|
|
.canvas-tx-name {
|
|
font-weight: 600;
|
|
font-size: 13px;
|
|
color: var(--text-primary);
|
|
}
|
|
|
|
.canvas-version {
|
|
font-size: 11px;
|
|
color: var(--text-muted);
|
|
background: var(--bg-active);
|
|
padding: 1px 6px;
|
|
border-radius: var(--radius-sm);
|
|
}
|
|
|
|
.canvas-save-state {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 4px;
|
|
font-size: 11px;
|
|
color: var(--text-muted);
|
|
}
|
|
|
|
.canvas-env-btn {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 5px;
|
|
padding: 3px 10px;
|
|
border-radius: var(--radius-sm);
|
|
border: 1px solid var(--border);
|
|
background: transparent;
|
|
color: var(--text-secondary);
|
|
font-size: 12px;
|
|
cursor: pointer;
|
|
transition: all 0.15s;
|
|
}
|
|
|
|
.canvas-env-btn:hover { background: var(--bg-hover); border-color: var(--text-muted); }
|
|
|
|
.canvas-action-btn {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 4px;
|
|
padding: 4px 10px;
|
|
border-radius: var(--radius-sm);
|
|
border: none;
|
|
font-size: 12px;
|
|
font-weight: 500;
|
|
cursor: pointer;
|
|
transition: all 0.15s;
|
|
background: transparent;
|
|
}
|
|
|
|
.canvas-action-btn.validate { color: var(--accent-green); }
|
|
.canvas-action-btn.validate:hover { background: rgba(34,197,94,0.1); }
|
|
.canvas-action-btn.simulate { color: var(--accent-blue); }
|
|
.canvas-action-btn.simulate:hover { background: rgba(59,130,246,0.1); }
|
|
.canvas-action-btn.execute {
|
|
color: #fff;
|
|
background: var(--accent-blue);
|
|
}
|
|
.canvas-action-btn.execute:hover { background: #2563eb; }
|
|
|
|
.canvas-body {
|
|
flex: 1;
|
|
background: var(--bg-base);
|
|
position: relative;
|
|
min-height: 0;
|
|
}
|
|
|
|
.canvas-empty {
|
|
position: absolute;
|
|
inset: 0;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
pointer-events: none;
|
|
z-index: 5;
|
|
}
|
|
|
|
.canvas-empty-content {
|
|
text-align: center;
|
|
color: var(--text-muted);
|
|
}
|
|
|
|
.canvas-empty-icon {
|
|
font-size: 48px;
|
|
margin-bottom: 16px;
|
|
opacity: 0.3;
|
|
}
|
|
|
|
.canvas-empty-content h3 {
|
|
font-size: 16px;
|
|
font-weight: 600;
|
|
color: var(--text-secondary);
|
|
margin-bottom: 8px;
|
|
}
|
|
|
|
.canvas-empty-content p {
|
|
font-size: 13px;
|
|
margin-bottom: 4px;
|
|
}
|
|
|
|
.canvas-empty-hint {
|
|
font-size: 12px;
|
|
margin-top: 8px !important;
|
|
}
|
|
|
|
.canvas-empty-hint kbd {
|
|
font-family: var(--font-mono);
|
|
font-size: 11px;
|
|
background: var(--bg-elevated);
|
|
border: 1px solid var(--border);
|
|
border-radius: 3px;
|
|
padding: 1px 5px;
|
|
}
|
|
|
|
.canvas-inspector {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 12px;
|
|
padding: 4px 14px;
|
|
background: var(--bg-surface);
|
|
border-top: 1px solid var(--border-subtle);
|
|
font-size: 11px;
|
|
color: var(--text-muted);
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
.inspector-item {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 4px;
|
|
}
|
|
|
|
.inspector-separator {
|
|
width: 1px;
|
|
height: 12px;
|
|
background: var(--border);
|
|
}
|
|
|
|
/* React Flow overrides */
|
|
.canvas-body .react-flow__background { background: var(--bg-base) !important; }
|
|
.canvas-body .react-flow__controls {
|
|
background: var(--bg-elevated) !important;
|
|
border: 1px solid var(--border) !important;
|
|
border-radius: var(--radius-md) !important;
|
|
box-shadow: 0 4px 12px rgba(0,0,0,0.3) !important;
|
|
}
|
|
.canvas-body .react-flow__controls-button {
|
|
background: transparent !important;
|
|
border-bottom: 1px solid var(--border) !important;
|
|
fill: var(--text-secondary) !important;
|
|
color: var(--text-secondary) !important;
|
|
}
|
|
.canvas-body .react-flow__controls-button:hover {
|
|
background: var(--bg-hover) !important;
|
|
}
|
|
.canvas-body .react-flow__controls-button svg { fill: var(--text-secondary) !important; }
|
|
|
|
.canvas-minimap {
|
|
background: var(--bg-elevated) !important;
|
|
border: 1px solid var(--border) !important;
|
|
border-radius: var(--radius-md) !important;
|
|
}
|
|
|
|
/* ─── TRANSACTION NODE ──────────────────────────────────────── */
|
|
.transaction-node {
|
|
background: var(--bg-elevated);
|
|
border: 1px solid var(--border);
|
|
border-radius: var(--radius-lg);
|
|
min-width: 160px;
|
|
box-shadow: 0 2px 8px rgba(0,0,0,0.3);
|
|
transition: all 0.15s;
|
|
}
|
|
|
|
.transaction-node:hover { box-shadow: 0 4px 16px rgba(0,0,0,0.4); }
|
|
.transaction-node.selected { border-color: var(--accent-blue) !important; box-shadow: 0 0 0 1px var(--accent-blue), 0 4px 16px rgba(59,130,246,0.2); }
|
|
|
|
.node-header {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 6px;
|
|
padding: 8px 10px 6px;
|
|
border-bottom: 1px solid var(--border-subtle);
|
|
}
|
|
|
|
.node-icon { font-size: 15px; }
|
|
.node-label { font-size: 12px; font-weight: 600; color: var(--text-primary); flex: 1; }
|
|
.node-status { display: flex; align-items: center; }
|
|
|
|
.node-body {
|
|
padding: 4px 10px 8px;
|
|
}
|
|
|
|
.node-category {
|
|
font-size: 10px;
|
|
text-transform: uppercase;
|
|
letter-spacing: 0.5px;
|
|
font-weight: 500;
|
|
}
|
|
|
|
.node-handle {
|
|
width: 8px !important;
|
|
height: 8px !important;
|
|
background: var(--bg-active) !important;
|
|
border: 2px solid var(--accent-blue) !important;
|
|
}
|
|
|
|
.node-handle:hover { background: var(--accent-blue) !important; }
|
|
|
|
/* ─── RIGHT PANEL ───────────────────────────────────────────── */
|
|
.right-panel {
|
|
background: var(--bg-surface);
|
|
display: flex;
|
|
flex-direction: column;
|
|
flex-shrink: 0;
|
|
min-width: 0;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.chat-header-agent {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 6px;
|
|
cursor: pointer;
|
|
padding: 2px 6px;
|
|
border-radius: var(--radius-sm);
|
|
font-size: 12px;
|
|
font-weight: 600;
|
|
color: var(--text-primary);
|
|
position: relative;
|
|
transition: background 0.15s;
|
|
}
|
|
|
|
.chat-header-agent:hover { background: var(--bg-hover); }
|
|
|
|
.agent-dropdown {
|
|
position: absolute;
|
|
top: 100%;
|
|
left: 0;
|
|
margin-top: 4px;
|
|
background: var(--bg-elevated);
|
|
border: 1px solid var(--border);
|
|
border-radius: var(--radius-md);
|
|
padding: 4px;
|
|
z-index: 100;
|
|
min-width: 180px;
|
|
box-shadow: 0 8px 24px rgba(0,0,0,0.4);
|
|
}
|
|
|
|
.agent-option {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
padding: 6px 10px;
|
|
border-radius: var(--radius-sm);
|
|
cursor: pointer;
|
|
font-size: 12px;
|
|
font-weight: 400;
|
|
color: var(--text-secondary);
|
|
transition: background 0.1s;
|
|
}
|
|
|
|
.agent-option:hover { background: var(--bg-hover); color: var(--text-primary); }
|
|
.agent-option.active { background: var(--bg-active); color: var(--text-primary); }
|
|
|
|
.context-toggle {
|
|
font-size: 11px;
|
|
padding: 2px 8px;
|
|
border-radius: var(--radius-sm);
|
|
border: 1px solid var(--border);
|
|
background: transparent;
|
|
color: var(--text-muted);
|
|
cursor: pointer;
|
|
transition: all 0.15s;
|
|
}
|
|
|
|
.context-toggle:hover { background: var(--bg-hover); color: var(--text-secondary); }
|
|
.context-toggle.active { background: var(--bg-active); color: var(--text-primary); border-color: var(--accent-blue); }
|
|
|
|
.agent-tabs {
|
|
display: flex;
|
|
border-bottom: 1px solid var(--border-subtle);
|
|
padding: 0 8px;
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
.agent-tab {
|
|
flex: 1;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
padding: 8px 4px;
|
|
border: none;
|
|
border-bottom: 2px solid transparent;
|
|
background: transparent;
|
|
cursor: pointer;
|
|
transition: all 0.15s;
|
|
}
|
|
|
|
.agent-tab:hover { background: var(--bg-hover); }
|
|
.agent-tab.active { border-bottom-width: 2px; }
|
|
|
|
.context-panel {
|
|
display: grid;
|
|
grid-template-columns: 1fr 1fr;
|
|
gap: 1px;
|
|
background: var(--border-subtle);
|
|
border-bottom: 1px solid var(--border-subtle);
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
.context-section {
|
|
padding: 6px 10px;
|
|
background: var(--bg-surface);
|
|
}
|
|
|
|
.context-label {
|
|
font-size: 10px;
|
|
color: var(--text-muted);
|
|
text-transform: uppercase;
|
|
letter-spacing: 0.3px;
|
|
display: block;
|
|
margin-bottom: 2px;
|
|
}
|
|
|
|
.context-value {
|
|
font-size: 12px;
|
|
color: var(--text-secondary);
|
|
font-weight: 500;
|
|
}
|
|
|
|
.context-value.pass { color: var(--accent-green); }
|
|
.context-value.fail { color: var(--accent-red); }
|
|
|
|
.chat-messages {
|
|
flex: 1;
|
|
overflow-y: auto;
|
|
padding: 8px;
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 8px;
|
|
}
|
|
|
|
.chat-message {
|
|
padding: 8px 10px;
|
|
border-radius: var(--radius-md);
|
|
font-size: 12px;
|
|
line-height: 1.5;
|
|
}
|
|
|
|
.chat-message.agent {
|
|
background: var(--bg-elevated);
|
|
border: 1px solid var(--border-subtle);
|
|
}
|
|
|
|
.chat-message.user {
|
|
background: rgba(59,130,246,0.1);
|
|
border: 1px solid rgba(59,130,246,0.2);
|
|
}
|
|
|
|
.chat-message.system {
|
|
background: var(--bg-input);
|
|
border: 1px solid var(--border-subtle);
|
|
color: var(--text-muted);
|
|
font-family: var(--font-mono);
|
|
font-size: 11px;
|
|
}
|
|
|
|
.message-header {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
margin-bottom: 4px;
|
|
}
|
|
|
|
.message-agent {
|
|
font-weight: 600;
|
|
font-size: 11px;
|
|
color: var(--text-secondary);
|
|
}
|
|
|
|
.message-time {
|
|
font-size: 10px;
|
|
color: var(--text-muted);
|
|
font-family: var(--font-mono);
|
|
}
|
|
|
|
.message-content {
|
|
color: var(--text-primary);
|
|
}
|
|
|
|
.action-tray {
|
|
display: flex;
|
|
gap: 4px;
|
|
padding: 6px 8px;
|
|
border-top: 1px solid var(--border-subtle);
|
|
border-bottom: 1px solid var(--border-subtle);
|
|
flex-wrap: wrap;
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
.action-tray-btn {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 3px;
|
|
padding: 3px 7px;
|
|
border-radius: var(--radius-sm);
|
|
border: 1px solid var(--border);
|
|
background: transparent;
|
|
color: var(--text-muted);
|
|
font-size: 10px;
|
|
cursor: pointer;
|
|
transition: all 0.15s;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
.action-tray-btn:hover { background: var(--bg-hover); color: var(--text-secondary); border-color: var(--text-muted); }
|
|
|
|
.chat-input-area {
|
|
display: flex;
|
|
gap: 6px;
|
|
padding: 8px;
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
.chat-input-area input {
|
|
flex: 1;
|
|
background: var(--bg-input);
|
|
border: 1px solid var(--border);
|
|
border-radius: var(--radius-md);
|
|
padding: 7px 10px;
|
|
font-size: 12px;
|
|
color: var(--text-primary);
|
|
outline: none;
|
|
transition: border-color 0.15s;
|
|
}
|
|
|
|
.chat-input-area input:focus { border-color: var(--accent-blue); }
|
|
.chat-input-area input::placeholder { color: var(--text-muted); }
|
|
|
|
.send-btn {
|
|
width: 32px;
|
|
height: 32px;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
border-radius: var(--radius-md);
|
|
border: none;
|
|
background: var(--accent-blue);
|
|
color: #fff;
|
|
cursor: pointer;
|
|
transition: background 0.15s;
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
.send-btn:hover { background: #2563eb; }
|
|
.send-btn:disabled { background: var(--bg-active); color: var(--text-muted); cursor: default; }
|
|
|
|
/* ─── BOTTOM PANEL ──────────────────────────────────────────── */
|
|
.bottom-panel {
|
|
background: var(--bg-surface);
|
|
display: flex;
|
|
flex-direction: column;
|
|
flex-shrink: 0;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.bottom-panel-header {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
padding: 0 8px;
|
|
border-bottom: 1px solid var(--border-subtle);
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
.bottom-panel-tabs {
|
|
display: flex;
|
|
gap: 0;
|
|
overflow-x: auto;
|
|
}
|
|
|
|
.bottom-tab {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 5px;
|
|
padding: 7px 12px;
|
|
border: none;
|
|
border-bottom: 2px solid transparent;
|
|
background: transparent;
|
|
color: var(--text-muted);
|
|
font-size: 11px;
|
|
cursor: pointer;
|
|
transition: all 0.15s;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
.bottom-tab:hover { color: var(--text-secondary); background: var(--bg-hover); }
|
|
.bottom-tab.active { color: var(--text-primary); border-bottom-color: var(--accent-blue); }
|
|
|
|
.tab-badge {
|
|
font-size: 9px;
|
|
padding: 0 5px;
|
|
border-radius: 8px;
|
|
font-weight: 600;
|
|
}
|
|
|
|
.tab-badge.info { background: rgba(59,130,246,0.2); color: var(--accent-blue); }
|
|
.tab-badge.warn { background: rgba(234,179,8,0.2); color: var(--accent-yellow); }
|
|
.tab-badge.error { background: rgba(239,68,68,0.2); color: var(--accent-red); }
|
|
|
|
.bottom-panel-actions {
|
|
display: flex;
|
|
gap: 2px;
|
|
}
|
|
|
|
.icon-btn-sm {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
width: 24px;
|
|
height: 24px;
|
|
border-radius: var(--radius-sm);
|
|
border: none;
|
|
background: transparent;
|
|
color: var(--text-muted);
|
|
cursor: pointer;
|
|
transition: all 0.15s;
|
|
}
|
|
|
|
.icon-btn-sm:hover { background: var(--bg-hover); color: var(--text-secondary); }
|
|
|
|
.bottom-panel-content {
|
|
flex: 1;
|
|
overflow: auto;
|
|
min-height: 0;
|
|
}
|
|
|
|
/* Terminal */
|
|
.terminal-content {
|
|
font-family: var(--font-mono);
|
|
font-size: 12px;
|
|
height: 100%;
|
|
display: flex;
|
|
flex-direction: column;
|
|
}
|
|
|
|
.terminal-filter {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 6px;
|
|
padding: 4px 10px;
|
|
border-bottom: 1px solid var(--border-subtle);
|
|
color: var(--text-muted);
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
.terminal-filter input {
|
|
flex: 1;
|
|
background: transparent;
|
|
border: none;
|
|
color: var(--text-secondary);
|
|
font-family: var(--font-mono);
|
|
font-size: 11px;
|
|
outline: none;
|
|
}
|
|
|
|
.terminal-filter input::placeholder { color: var(--text-muted); }
|
|
|
|
.terminal-entries {
|
|
padding: 4px 10px;
|
|
flex: 1;
|
|
overflow-y: auto;
|
|
}
|
|
|
|
.terminal-entry {
|
|
display: flex;
|
|
gap: 8px;
|
|
padding: 2px 0;
|
|
line-height: 1.6;
|
|
}
|
|
|
|
.terminal-time { color: var(--text-muted); flex-shrink: 0; }
|
|
.terminal-level { font-weight: 600; flex-shrink: 0; min-width: 50px; }
|
|
.terminal-source { color: var(--accent-blue); flex-shrink: 0; }
|
|
.terminal-msg { color: var(--text-primary); }
|
|
|
|
.terminal-cursor { padding: 2px 0; }
|
|
|
|
.cursor-blink {
|
|
color: var(--accent-blue);
|
|
animation: blink 1s step-end infinite;
|
|
}
|
|
|
|
@keyframes blink {
|
|
50% { opacity: 0; }
|
|
}
|
|
|
|
/* Validation */
|
|
.validation-content { padding: 4px 10px; }
|
|
|
|
.validation-entry {
|
|
display: flex;
|
|
gap: 8px;
|
|
padding: 4px 0;
|
|
font-size: 12px;
|
|
align-items: baseline;
|
|
}
|
|
|
|
.validation-severity {
|
|
font-size: 10px;
|
|
font-weight: 600;
|
|
font-family: var(--font-mono);
|
|
padding: 1px 6px;
|
|
border-radius: var(--radius-sm);
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
.validation-entry.error .validation-severity { background: rgba(239,68,68,0.15); color: var(--accent-red); }
|
|
.validation-entry.warning .validation-severity { background: rgba(234,179,8,0.15); color: var(--accent-yellow); }
|
|
.validation-entry.info .validation-severity { background: rgba(59,130,246,0.15); color: var(--accent-blue); }
|
|
|
|
.validation-node {
|
|
font-family: var(--font-mono);
|
|
color: var(--accent-purple);
|
|
font-size: 11px;
|
|
}
|
|
|
|
.validation-msg { color: var(--text-secondary); }
|
|
|
|
/* 800 System */
|
|
.system-800-content { padding: 10px; }
|
|
|
|
.system-800-grid {
|
|
display: grid;
|
|
grid-template-columns: repeat(auto-fill, minmax(160px, 1fr));
|
|
gap: 8px;
|
|
}
|
|
|
|
.system-800-card {
|
|
background: var(--bg-elevated);
|
|
border: 1px solid var(--border);
|
|
border-radius: var(--radius-md);
|
|
padding: 10px;
|
|
}
|
|
|
|
.system-800-card-header {
|
|
font-size: 10px;
|
|
text-transform: uppercase;
|
|
letter-spacing: 0.3px;
|
|
color: var(--text-muted);
|
|
margin-bottom: 4px;
|
|
}
|
|
|
|
.system-800-card-value {
|
|
font-size: 13px;
|
|
font-weight: 600;
|
|
color: var(--text-primary);
|
|
margin-bottom: 4px;
|
|
}
|
|
|
|
.system-800-card-status {
|
|
font-size: 10px;
|
|
font-weight: 600;
|
|
}
|
|
|
|
.system-800-card-status.healthy { color: var(--accent-green); }
|
|
.system-800-card-status.idle { color: var(--text-muted); }
|
|
.system-800-card-status.error { color: var(--accent-red); }
|
|
|
|
/* Settlement table */
|
|
.settlement-content { overflow-x: auto; }
|
|
|
|
.settlement-table {
|
|
width: 100%;
|
|
border-collapse: collapse;
|
|
font-size: 12px;
|
|
}
|
|
|
|
.settlement-table th {
|
|
text-align: left;
|
|
padding: 6px 12px;
|
|
font-size: 10px;
|
|
text-transform: uppercase;
|
|
letter-spacing: 0.3px;
|
|
color: var(--text-muted);
|
|
border-bottom: 1px solid var(--border);
|
|
font-weight: 600;
|
|
position: sticky;
|
|
top: 0;
|
|
background: var(--bg-surface);
|
|
}
|
|
|
|
.settlement-table td {
|
|
padding: 6px 12px;
|
|
color: var(--text-secondary);
|
|
border-bottom: 1px solid var(--border-subtle);
|
|
}
|
|
|
|
.settlement-table tr:hover td { background: var(--bg-hover); }
|
|
|
|
.mono { font-family: var(--font-mono); font-size: 11px; }
|
|
|
|
.status-badge {
|
|
font-size: 10px;
|
|
font-weight: 600;
|
|
padding: 2px 8px;
|
|
border-radius: 10px;
|
|
border: 1px solid;
|
|
text-transform: capitalize;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
/* Audit */
|
|
.audit-content { padding: 4px 10px; }
|
|
|
|
.audit-entry {
|
|
display: flex;
|
|
gap: 8px;
|
|
padding: 3px 0;
|
|
font-size: 12px;
|
|
align-items: baseline;
|
|
}
|
|
|
|
.audit-time {
|
|
font-family: var(--font-mono);
|
|
font-size: 11px;
|
|
color: var(--text-muted);
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
.audit-user {
|
|
color: var(--accent-blue);
|
|
font-weight: 500;
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
.audit-action {
|
|
font-family: var(--font-mono);
|
|
font-size: 11px;
|
|
color: var(--accent-purple);
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
.audit-detail { color: var(--text-secondary); }
|
|
|
|
/* Empty tab */
|
|
.empty-tab-content {
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: center;
|
|
justify-content: center;
|
|
height: 100%;
|
|
gap: 8px;
|
|
color: var(--text-muted);
|
|
font-size: 12px;
|
|
}
|
|
|
|
/* ─── STATUS BAR ────────────────────────────────────────────── */
|
|
.status-bar {
|
|
height: var(--status-bar-height);
|
|
background: var(--accent-blue);
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
padding: 0 12px;
|
|
font-size: 11px;
|
|
color: rgba(255,255,255,0.9);
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
.status-bar-left, .status-bar-right {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 12px;
|
|
}
|
|
|
|
.status-item {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 4px;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
.status-dot {
|
|
width: 6px;
|
|
height: 6px;
|
|
border-radius: 50%;
|
|
}
|
|
|
|
.status-dot.green { background: #4ade80; }
|
|
.status-dot.red { background: #f87171; }
|
|
|
|
.status-kbd {
|
|
font-family: var(--font-mono);
|
|
font-size: 10px;
|
|
background: rgba(255,255,255,0.15);
|
|
border-radius: 3px;
|
|
padding: 0 4px;
|
|
}
|
|
|
|
/* ─── COMMAND PALETTE ───────────────────────────────────────── */
|
|
.command-palette-overlay {
|
|
position: fixed;
|
|
inset: 0;
|
|
background: rgba(0,0,0,0.5);
|
|
display: flex;
|
|
justify-content: center;
|
|
padding-top: 80px;
|
|
z-index: 1000;
|
|
backdrop-filter: blur(2px);
|
|
}
|
|
|
|
.command-palette {
|
|
width: 520px;
|
|
max-height: 400px;
|
|
background: var(--bg-elevated);
|
|
border: 1px solid var(--border);
|
|
border-radius: var(--radius-lg);
|
|
box-shadow: 0 16px 48px rgba(0,0,0,0.5);
|
|
display: flex;
|
|
flex-direction: column;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.command-palette-input {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 10px;
|
|
padding: 12px 16px;
|
|
border-bottom: 1px solid var(--border);
|
|
color: var(--text-muted);
|
|
}
|
|
|
|
.command-palette-input input {
|
|
flex: 1;
|
|
background: transparent;
|
|
border: none;
|
|
font-size: 14px;
|
|
color: var(--text-primary);
|
|
outline: none;
|
|
}
|
|
|
|
.command-palette-input input::placeholder { color: var(--text-muted); }
|
|
|
|
.command-palette-results {
|
|
flex: 1;
|
|
overflow-y: auto;
|
|
padding: 4px;
|
|
}
|
|
|
|
.command-group-header {
|
|
font-size: 10px;
|
|
text-transform: uppercase;
|
|
letter-spacing: 0.5px;
|
|
color: var(--text-muted);
|
|
padding: 8px 12px 4px;
|
|
font-weight: 600;
|
|
}
|
|
|
|
.command-item {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
padding: 7px 12px;
|
|
border-radius: var(--radius-sm);
|
|
cursor: pointer;
|
|
color: var(--text-secondary);
|
|
transition: all 0.1s;
|
|
}
|
|
|
|
.command-item:hover { background: var(--bg-hover); color: var(--text-primary); }
|
|
|
|
.command-label { flex: 1; font-size: 13px; }
|
|
|
|
.command-shortcut {
|
|
font-family: var(--font-mono);
|
|
font-size: 10px;
|
|
background: var(--bg-active);
|
|
border: 1px solid var(--border);
|
|
border-radius: 3px;
|
|
padding: 1px 6px;
|
|
color: var(--text-muted);
|
|
}
|
|
|
|
.command-empty {
|
|
padding: 24px;
|
|
text-align: center;
|
|
color: var(--text-muted);
|
|
font-size: 13px;
|
|
}
|
|
|
|
.command-item.selected {
|
|
background: var(--bg-active);
|
|
color: var(--text-primary);
|
|
}
|
|
|
|
/* ─── TRANSACTION TABS ──────────────────────────────────────── */
|
|
.transaction-tabs {
|
|
display: flex;
|
|
align-items: center;
|
|
background: var(--bg-base);
|
|
border-bottom: 1px solid var(--border-subtle);
|
|
padding: 0;
|
|
flex-shrink: 0;
|
|
overflow-x: auto;
|
|
}
|
|
|
|
.transaction-tab {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 6px;
|
|
padding: 6px 14px;
|
|
font-size: 12px;
|
|
color: var(--text-muted);
|
|
cursor: pointer;
|
|
border-right: 1px solid var(--border-subtle);
|
|
white-space: nowrap;
|
|
transition: all 0.15s;
|
|
user-select: none;
|
|
}
|
|
|
|
.transaction-tab:hover { background: var(--bg-hover); color: var(--text-secondary); }
|
|
.transaction-tab.active { background: var(--bg-surface); color: var(--text-primary); }
|
|
|
|
.tab-close {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
width: 16px;
|
|
height: 16px;
|
|
border: none;
|
|
background: transparent;
|
|
color: var(--text-muted);
|
|
cursor: pointer;
|
|
border-radius: 2px;
|
|
opacity: 0;
|
|
transition: all 0.15s;
|
|
}
|
|
|
|
.transaction-tab:hover .tab-close { opacity: 1; }
|
|
.tab-close:hover { background: var(--bg-active); color: var(--text-primary); }
|
|
|
|
.transaction-tab-add {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
width: 28px;
|
|
height: 28px;
|
|
border: none;
|
|
background: transparent;
|
|
color: var(--text-muted);
|
|
cursor: pointer;
|
|
transition: all 0.15s;
|
|
}
|
|
|
|
.transaction-tab-add:hover { color: var(--text-secondary); background: var(--bg-hover); }
|
|
|
|
/* ─── CANVAS TOOLBAR ────────────────────────────────────────── */
|
|
.canvas-toolbar-separator {
|
|
width: 1px;
|
|
height: 16px;
|
|
background: var(--border);
|
|
margin: 0 2px;
|
|
}
|
|
|
|
.canvas-toolbar-btn {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
width: 26px;
|
|
height: 26px;
|
|
border: none;
|
|
background: transparent;
|
|
color: var(--text-muted);
|
|
cursor: pointer;
|
|
border-radius: var(--radius-sm);
|
|
transition: all 0.15s;
|
|
}
|
|
|
|
.canvas-toolbar-btn:hover { background: var(--bg-hover); color: var(--text-primary); }
|
|
.canvas-toolbar-btn:disabled { opacity: 0.3; cursor: default; }
|
|
.canvas-toolbar-btn:disabled:hover { background: transparent; color: var(--text-muted); }
|
|
|
|
.canvas-tx-name {
|
|
font-weight: 600;
|
|
font-size: 13px;
|
|
color: var(--text-primary);
|
|
cursor: pointer;
|
|
padding: 1px 4px;
|
|
border-radius: var(--radius-sm);
|
|
transition: background 0.15s;
|
|
}
|
|
|
|
.canvas-tx-name:hover { background: var(--bg-hover); }
|
|
|
|
.canvas-tx-name-input {
|
|
font-weight: 600;
|
|
font-size: 13px;
|
|
color: var(--text-primary);
|
|
background: var(--bg-input);
|
|
border: 1px solid var(--accent-blue);
|
|
border-radius: var(--radius-sm);
|
|
padding: 1px 6px;
|
|
outline: none;
|
|
width: 200px;
|
|
}
|
|
|
|
.zoom-display {
|
|
font-size: 10px !important;
|
|
font-family: var(--font-mono) !important;
|
|
min-width: 36px;
|
|
cursor: default !important;
|
|
}
|
|
|
|
/* ─── SIMULATION OVERLAY ────────────────────────────────────── */
|
|
.simulation-overlay {
|
|
position: absolute;
|
|
inset: 0;
|
|
background: rgba(14, 14, 16, 0.8);
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
gap: 12px;
|
|
color: var(--accent-blue);
|
|
font-size: 14px;
|
|
font-weight: 500;
|
|
z-index: 10;
|
|
}
|
|
|
|
.simulation-spinner {
|
|
width: 20px;
|
|
height: 20px;
|
|
border: 2px solid var(--border);
|
|
border-top-color: var(--accent-blue);
|
|
border-radius: 50%;
|
|
animation: spin 0.8s linear infinite;
|
|
}
|
|
|
|
@keyframes spin { to { transform: rotate(360deg); } }
|
|
|
|
.simulation-results-overlay {
|
|
position: absolute;
|
|
bottom: 16px;
|
|
right: 16px;
|
|
z-index: 10;
|
|
}
|
|
|
|
.simulation-results-card {
|
|
background: var(--bg-elevated);
|
|
border: 1px solid var(--accent-green);
|
|
border-radius: var(--radius-lg);
|
|
box-shadow: 0 8px 24px rgba(0,0,0,0.4);
|
|
max-width: 400px;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.simulation-results-header {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
padding: 8px 12px;
|
|
border-bottom: 1px solid var(--border-subtle);
|
|
font-size: 12px;
|
|
font-weight: 600;
|
|
color: var(--text-primary);
|
|
}
|
|
|
|
.simulation-dismiss {
|
|
margin-left: auto;
|
|
border: none;
|
|
background: transparent;
|
|
color: var(--text-muted);
|
|
cursor: pointer;
|
|
padding: 2px;
|
|
}
|
|
|
|
.simulation-dismiss:hover { color: var(--text-primary); }
|
|
|
|
.simulation-results-body {
|
|
padding: 10px 12px;
|
|
font-family: var(--font-mono);
|
|
font-size: 11px;
|
|
color: var(--text-secondary);
|
|
line-height: 1.6;
|
|
white-space: pre-wrap;
|
|
margin: 0;
|
|
}
|
|
|
|
.selected-info { color: var(--accent-blue); font-weight: 500; }
|
|
|
|
/* ─── NODE BADGES ───────────────────────────────────────────── */
|
|
.node-badges {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 4px;
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
.node-badge {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
width: 16px;
|
|
height: 16px;
|
|
border-radius: 50%;
|
|
font-size: 8px;
|
|
}
|
|
|
|
.node-badge.compliance { background: rgba(34, 197, 94, 0.2); color: var(--accent-green); }
|
|
.node-badge.routing { background: rgba(249, 115, 22, 0.2); font-size: 7px; }
|
|
|
|
.transaction-node.status-valid { border-color: var(--accent-green) !important; }
|
|
.transaction-node.status-warning { border-color: var(--accent-yellow) !important; }
|
|
.transaction-node.status-error { border-color: var(--accent-red) !important; }
|
|
|
|
/* ─── NOTIFICATION DROPDOWN ─────────────────────────────────── */
|
|
.notification-wrapper, .user-menu-wrapper {
|
|
position: relative;
|
|
}
|
|
|
|
.notification-dropdown, .user-menu-dropdown {
|
|
position: absolute;
|
|
top: 100%;
|
|
right: 0;
|
|
margin-top: 8px;
|
|
background: var(--bg-elevated);
|
|
border: 1px solid var(--border);
|
|
border-radius: var(--radius-lg);
|
|
box-shadow: 0 12px 36px rgba(0,0,0,0.5);
|
|
z-index: 200;
|
|
min-width: 300px;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.notification-dropdown-header {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
padding: 10px 14px;
|
|
border-bottom: 1px solid var(--border-subtle);
|
|
font-size: 12px;
|
|
font-weight: 600;
|
|
color: var(--text-primary);
|
|
}
|
|
|
|
.mark-read-btn {
|
|
font-size: 10px;
|
|
color: var(--accent-blue);
|
|
background: transparent;
|
|
border: none;
|
|
cursor: pointer;
|
|
}
|
|
|
|
.mark-read-btn:hover { text-decoration: underline; }
|
|
|
|
.notification-item {
|
|
display: flex;
|
|
gap: 10px;
|
|
padding: 10px 14px;
|
|
cursor: pointer;
|
|
transition: background 0.15s;
|
|
align-items: flex-start;
|
|
}
|
|
|
|
.notification-item:hover { background: var(--bg-hover); }
|
|
.notification-item.read { opacity: 0.6; }
|
|
|
|
.notification-dot {
|
|
width: 6px;
|
|
height: 6px;
|
|
border-radius: 50%;
|
|
flex-shrink: 0;
|
|
margin-top: 5px;
|
|
}
|
|
|
|
.notification-content {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 2px;
|
|
min-width: 0;
|
|
}
|
|
|
|
.notification-title {
|
|
font-size: 12px;
|
|
font-weight: 600;
|
|
color: var(--text-primary);
|
|
}
|
|
|
|
.notification-message {
|
|
font-size: 11px;
|
|
color: var(--text-secondary);
|
|
line-height: 1.4;
|
|
}
|
|
|
|
.notification-time {
|
|
font-size: 10px;
|
|
color: var(--text-muted);
|
|
font-family: var(--font-mono);
|
|
}
|
|
|
|
/* ─── USER MENU ─────────────────────────────────────────────── */
|
|
.user-menu-dropdown { min-width: 240px; }
|
|
|
|
.user-menu-profile {
|
|
display: flex;
|
|
gap: 10px;
|
|
padding: 12px 14px;
|
|
align-items: center;
|
|
}
|
|
|
|
.user-avatar {
|
|
width: 32px;
|
|
height: 32px;
|
|
border-radius: 50%;
|
|
background: var(--accent-blue);
|
|
color: #fff;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
font-size: 12px;
|
|
font-weight: 600;
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
.user-name { font-size: 13px; font-weight: 600; color: var(--text-primary); }
|
|
.user-role { font-size: 11px; color: var(--text-muted); }
|
|
|
|
.user-menu-divider { height: 1px; background: var(--border-subtle); }
|
|
|
|
.user-menu-item {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
padding: 8px 14px;
|
|
font-size: 12px;
|
|
color: var(--text-secondary);
|
|
cursor: pointer;
|
|
transition: background 0.15s;
|
|
}
|
|
|
|
.user-menu-item:hover { background: var(--bg-hover); color: var(--text-primary); }
|
|
.user-menu-item.logout { color: var(--accent-red); }
|
|
.user-menu-item.logout:hover { background: rgba(239, 68, 68, 0.1); }
|
|
|
|
.user-menu-badge {
|
|
margin-left: auto;
|
|
font-size: 10px;
|
|
padding: 1px 6px;
|
|
border-radius: 8px;
|
|
background: rgba(59, 130, 246, 0.2);
|
|
color: var(--accent-blue);
|
|
font-weight: 600;
|
|
}
|
|
|
|
/* ─── SCOPE SELECTOR ────────────────────────────────────────── */
|
|
.chat-header-actions {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 4px;
|
|
}
|
|
|
|
.scope-selector {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 4px;
|
|
padding: 2px 6px;
|
|
border-radius: var(--radius-sm);
|
|
font-size: 10px;
|
|
color: var(--text-muted);
|
|
cursor: pointer;
|
|
position: relative;
|
|
transition: all 0.15s;
|
|
}
|
|
|
|
.scope-selector:hover { background: var(--bg-hover); color: var(--text-secondary); }
|
|
|
|
.scope-dropdown {
|
|
position: absolute;
|
|
top: 100%;
|
|
right: 0;
|
|
margin-top: 4px;
|
|
background: var(--bg-elevated);
|
|
border: 1px solid var(--border);
|
|
border-radius: var(--radius-md);
|
|
padding: 4px;
|
|
z-index: 100;
|
|
min-width: 160px;
|
|
box-shadow: 0 8px 24px rgba(0,0,0,0.4);
|
|
}
|
|
|
|
.scope-option {
|
|
padding: 5px 10px;
|
|
font-size: 11px;
|
|
color: var(--text-secondary);
|
|
cursor: pointer;
|
|
border-radius: var(--radius-sm);
|
|
transition: background 0.1s;
|
|
}
|
|
|
|
.scope-option:hover { background: var(--bg-hover); color: var(--text-primary); }
|
|
.scope-option.active { background: var(--bg-active); color: var(--text-primary); }
|
|
|
|
.icon-btn-xs {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
width: 22px;
|
|
height: 22px;
|
|
border-radius: var(--radius-sm);
|
|
border: none;
|
|
background: transparent;
|
|
color: var(--text-muted);
|
|
cursor: pointer;
|
|
transition: all 0.15s;
|
|
}
|
|
|
|
.icon-btn-xs:hover { background: var(--bg-hover); color: var(--text-secondary); }
|
|
.icon-btn-xs.active { background: var(--bg-active); color: var(--text-primary); }
|
|
|
|
/* ─── THREAD HISTORY ────────────────────────────────────────── */
|
|
.thread-history {
|
|
border-bottom: 1px solid var(--border-subtle);
|
|
flex-shrink: 0;
|
|
max-height: 160px;
|
|
overflow-y: auto;
|
|
}
|
|
|
|
.thread-history-header {
|
|
font-size: 10px;
|
|
text-transform: uppercase;
|
|
letter-spacing: 0.3px;
|
|
color: var(--text-muted);
|
|
padding: 6px 10px 4px;
|
|
font-weight: 600;
|
|
}
|
|
|
|
.thread-item {
|
|
display: flex;
|
|
align-items: flex-start;
|
|
gap: 8px;
|
|
padding: 6px 10px;
|
|
cursor: pointer;
|
|
transition: background 0.15s;
|
|
}
|
|
|
|
.thread-item:hover { background: var(--bg-hover); }
|
|
|
|
.thread-item-content {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 1px;
|
|
}
|
|
|
|
.thread-item-title { font-size: 12px; color: var(--text-secondary); }
|
|
.thread-item-meta { font-size: 10px; color: var(--text-muted); }
|
|
|
|
.context-value.warn { color: var(--accent-yellow); }
|
|
|
|
/* ─── SETTINGS PANEL ────────────────────────────────────────── */
|
|
.settings-panel { padding: 8px 0; }
|
|
|
|
.settings-group { margin-bottom: 4px; }
|
|
|
|
.settings-group-header {
|
|
font-size: 10px;
|
|
text-transform: uppercase;
|
|
letter-spacing: 0.3px;
|
|
color: var(--text-muted);
|
|
padding: 8px 12px 4px;
|
|
font-weight: 600;
|
|
}
|
|
|
|
.settings-item {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
padding: 5px 12px;
|
|
font-size: 12px;
|
|
color: var(--text-secondary);
|
|
}
|
|
|
|
.settings-value {
|
|
font-size: 11px;
|
|
color: var(--text-muted);
|
|
font-family: var(--font-mono);
|
|
}
|
|
|
|
/* ─── AGENT LIST ────────────────────────────────────────────── */
|
|
.agent-list-item {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 10px;
|
|
padding: 8px 12px;
|
|
transition: background 0.15s;
|
|
}
|
|
|
|
.agent-list-item:hover { background: var(--bg-hover); }
|
|
|
|
.agent-list-dot {
|
|
width: 8px;
|
|
height: 8px;
|
|
border-radius: 50%;
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
.agent-list-name { font-size: 12px; color: var(--text-primary); font-weight: 500; }
|
|
.agent-list-desc { font-size: 11px; color: var(--text-muted); }
|
|
|
|
/* ─── TOOLTIP ───────────────────────────────────────────────── */
|
|
.component-tooltip {
|
|
position: fixed;
|
|
background: var(--bg-elevated);
|
|
border: 1px solid var(--border);
|
|
border-radius: var(--radius-md);
|
|
padding: 10px 12px;
|
|
z-index: 1000;
|
|
max-width: 280px;
|
|
box-shadow: 0 8px 24px rgba(0,0,0,0.5);
|
|
pointer-events: none;
|
|
}
|
|
|
|
.tooltip-header {
|
|
font-size: 13px;
|
|
font-weight: 600;
|
|
color: var(--text-primary);
|
|
margin-bottom: 4px;
|
|
}
|
|
|
|
.tooltip-desc {
|
|
font-size: 11px;
|
|
color: var(--text-secondary);
|
|
line-height: 1.4;
|
|
margin-bottom: 6px;
|
|
}
|
|
|
|
.tooltip-meta {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
}
|
|
|
|
.tooltip-cat {
|
|
font-size: 10px;
|
|
font-weight: 600;
|
|
text-transform: uppercase;
|
|
letter-spacing: 0.3px;
|
|
}
|
|
|
|
.tooltip-fields {
|
|
font-size: 10px;
|
|
color: var(--text-muted);
|
|
margin-top: 4px;
|
|
}
|
|
|
|
/* ─── BOTTOM PANEL EXTRAS ───────────────────────────────────── */
|
|
.bottom-search-bar, .bottom-filter-bar {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
padding: 4px 10px;
|
|
border-bottom: 1px solid var(--border-subtle);
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
.bottom-search-bar input {
|
|
flex: 1;
|
|
background: transparent;
|
|
border: none;
|
|
color: var(--text-secondary);
|
|
font-size: 12px;
|
|
outline: none;
|
|
}
|
|
|
|
.bottom-search-bar input::placeholder { color: var(--text-muted); }
|
|
.bottom-search-bar svg { color: var(--text-muted); }
|
|
|
|
.filter-pill {
|
|
padding: 2px 8px;
|
|
border-radius: 10px;
|
|
border: 1px solid var(--border);
|
|
background: transparent;
|
|
color: var(--text-muted);
|
|
font-size: 10px;
|
|
cursor: pointer;
|
|
transition: all 0.15s;
|
|
}
|
|
|
|
.filter-pill:hover { background: var(--bg-hover); color: var(--text-secondary); }
|
|
.filter-pill.active { background: var(--bg-active); color: var(--text-primary); border-color: var(--accent-blue); }
|
|
|
|
.direction-badge {
|
|
font-size: 10px;
|
|
font-weight: 600;
|
|
font-family: var(--font-mono);
|
|
}
|
|
|
|
.direction-badge.inbound { color: var(--accent-green); }
|
|
.direction-badge.outbound { color: var(--accent-blue); }
|
|
|
|
.exception-type {
|
|
font-family: var(--font-mono);
|
|
font-size: 10px;
|
|
color: var(--accent-orange);
|
|
padding: 1px 6px;
|
|
background: rgba(249, 115, 22, 0.1);
|
|
border-radius: var(--radius-sm);
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
.messages-content, .events-content, .reconciliation-content, .exceptions-content {
|
|
padding: 4px 0;
|
|
overflow-x: auto;
|
|
}
|
|
|
|
/* ═══════════════════════════════════════════════════════════════
|
|
PORTAL — Login, Layout, Dashboard, Modules
|
|
═══════════════════════════════════════════════════════════════ */
|
|
|
|
/* ── Loading Screen ── */
|
|
.portal-loading {
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: center;
|
|
justify-content: center;
|
|
height: 100vh;
|
|
background: var(--bg-base);
|
|
color: var(--text-secondary);
|
|
gap: 16px;
|
|
font-size: 14px;
|
|
}
|
|
.portal-loading-spinner {
|
|
width: 32px; height: 32px;
|
|
border: 3px solid var(--border);
|
|
border-top-color: var(--accent);
|
|
border-radius: 50%;
|
|
animation: spin 0.8s linear infinite;
|
|
}
|
|
|
|
/* ── Login Page ── */
|
|
.login-page {
|
|
min-height: 100vh;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
background: var(--bg-base);
|
|
position: relative;
|
|
overflow: hidden;
|
|
padding: 24px;
|
|
}
|
|
.login-bg-grid {
|
|
position: absolute;
|
|
inset: 0;
|
|
background-image:
|
|
linear-gradient(rgba(59,130,246,0.03) 1px, transparent 1px),
|
|
linear-gradient(90deg, rgba(59,130,246,0.03) 1px, transparent 1px);
|
|
background-size: 40px 40px;
|
|
}
|
|
.login-bg-glow {
|
|
position: absolute;
|
|
top: 30%;
|
|
left: 50%;
|
|
width: 600px;
|
|
height: 600px;
|
|
transform: translate(-50%, -50%);
|
|
background: radial-gradient(circle, rgba(59,130,246,0.08) 0%, transparent 70%);
|
|
pointer-events: none;
|
|
}
|
|
.login-container {
|
|
display: flex;
|
|
max-width: 1000px;
|
|
width: 100%;
|
|
gap: 48px;
|
|
position: relative;
|
|
z-index: 1;
|
|
align-items: center;
|
|
}
|
|
.login-left {
|
|
flex: 1;
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 32px;
|
|
}
|
|
.login-right {
|
|
flex: 1;
|
|
max-width: 420px;
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 12px;
|
|
}
|
|
.login-brand {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 8px;
|
|
}
|
|
.login-logo {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 12px;
|
|
}
|
|
.login-logo h1 {
|
|
font-size: 24px;
|
|
font-weight: 700;
|
|
color: var(--text-primary);
|
|
margin: 0;
|
|
line-height: 1.2;
|
|
}
|
|
.login-plc {
|
|
font-size: 11px;
|
|
font-weight: 600;
|
|
color: var(--accent);
|
|
letter-spacing: 2px;
|
|
margin-top: -2px;
|
|
}
|
|
.login-tagline {
|
|
font-size: 14px;
|
|
color: var(--text-secondary);
|
|
margin: 0;
|
|
}
|
|
.login-features {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 18px;
|
|
}
|
|
.login-feature {
|
|
display: flex;
|
|
gap: 14px;
|
|
align-items: flex-start;
|
|
}
|
|
.login-feature-icon {
|
|
width: 36px;
|
|
height: 36px;
|
|
background: var(--bg-elevated);
|
|
border: 1px solid var(--border);
|
|
border-radius: 8px;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
flex-shrink: 0;
|
|
color: var(--accent);
|
|
}
|
|
.login-feature h3 {
|
|
font-size: 13px;
|
|
font-weight: 600;
|
|
color: var(--text-primary);
|
|
margin: 0 0 3px;
|
|
}
|
|
.login-feature p {
|
|
font-size: 12px;
|
|
color: var(--text-secondary);
|
|
margin: 0;
|
|
line-height: 1.4;
|
|
}
|
|
.login-compliance-badges {
|
|
display: flex;
|
|
gap: 8px;
|
|
flex-wrap: wrap;
|
|
}
|
|
.compliance-badge {
|
|
padding: 4px 10px;
|
|
font-size: 10px;
|
|
font-weight: 600;
|
|
letter-spacing: 1px;
|
|
border: 1px solid var(--border);
|
|
border-radius: 4px;
|
|
color: var(--text-secondary);
|
|
background: var(--bg-surface);
|
|
}
|
|
.login-card {
|
|
background: var(--bg-surface);
|
|
border: 1px solid var(--border);
|
|
border-radius: 12px;
|
|
padding: 28px;
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 20px;
|
|
}
|
|
.login-card-header {
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: center;
|
|
gap: 8px;
|
|
text-align: center;
|
|
color: var(--accent);
|
|
}
|
|
.login-card-header h2 {
|
|
font-size: 18px;
|
|
color: var(--text-primary);
|
|
margin: 0;
|
|
}
|
|
.login-card-header p {
|
|
font-size: 12px;
|
|
color: var(--text-secondary);
|
|
margin: 0;
|
|
}
|
|
.login-error {
|
|
padding: 10px 14px;
|
|
background: rgba(239,68,68,0.1);
|
|
border: 1px solid rgba(239,68,68,0.3);
|
|
border-radius: 6px;
|
|
color: #ef4444;
|
|
font-size: 12px;
|
|
}
|
|
.login-wallets {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 10px;
|
|
}
|
|
.wallet-option {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
padding: 14px 16px;
|
|
background: var(--bg-elevated);
|
|
border: 1px solid var(--border);
|
|
border-radius: 10px;
|
|
cursor: pointer;
|
|
transition: all 0.15s;
|
|
color: var(--text-primary);
|
|
}
|
|
.wallet-option:hover {
|
|
border-color: var(--accent);
|
|
background: var(--bg-hover);
|
|
}
|
|
.wallet-option.connecting {
|
|
border-color: var(--accent);
|
|
opacity: 0.8;
|
|
}
|
|
.wallet-option:disabled {
|
|
opacity: 0.5;
|
|
cursor: not-allowed;
|
|
}
|
|
.wallet-option-left {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 12px;
|
|
}
|
|
.wallet-icon {
|
|
width: 40px;
|
|
height: 40px;
|
|
border-radius: 10px;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
font-size: 20px;
|
|
}
|
|
.wallet-icon.metamask { background: rgba(245,133,36,0.15); }
|
|
.wallet-icon.walletconnect { background: rgba(59,130,246,0.15); }
|
|
.wallet-icon.coinbase { background: rgba(0,82,255,0.15); }
|
|
.wallet-name {
|
|
display: block;
|
|
font-size: 14px;
|
|
font-weight: 600;
|
|
color: var(--text-primary);
|
|
}
|
|
.wallet-desc {
|
|
display: block;
|
|
font-size: 11px;
|
|
color: var(--text-secondary);
|
|
margin-top: 2px;
|
|
}
|
|
.wallet-arrow { color: var(--text-secondary); }
|
|
.wallet-spinner {
|
|
width: 18px; height: 18px;
|
|
border: 2px solid var(--border);
|
|
border-top-color: var(--accent);
|
|
border-radius: 50%;
|
|
animation: spin 0.7s linear infinite;
|
|
}
|
|
.login-divider {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 12px;
|
|
color: var(--text-secondary);
|
|
font-size: 11px;
|
|
}
|
|
.login-divider::before, .login-divider::after {
|
|
content: '';
|
|
flex: 1;
|
|
height: 1px;
|
|
background: var(--border);
|
|
}
|
|
.login-demo-btn {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
gap: 8px;
|
|
padding: 12px;
|
|
background: linear-gradient(135deg, rgba(59,130,246,0.15), rgba(168,85,247,0.15));
|
|
border: 1px solid rgba(59,130,246,0.3);
|
|
border-radius: 8px;
|
|
color: var(--text-primary);
|
|
font-size: 13px;
|
|
font-weight: 600;
|
|
cursor: pointer;
|
|
transition: all 0.15s;
|
|
}
|
|
.login-demo-btn:hover {
|
|
border-color: var(--accent);
|
|
background: linear-gradient(135deg, rgba(59,130,246,0.25), rgba(168,85,247,0.25));
|
|
}
|
|
.login-terms {
|
|
font-size: 10px;
|
|
color: var(--text-secondary);
|
|
text-align: center;
|
|
line-height: 1.5;
|
|
margin: 0;
|
|
}
|
|
.login-security-note {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
gap: 6px;
|
|
font-size: 10px;
|
|
color: var(--text-secondary);
|
|
}
|
|
|
|
/* ── Portal Layout ── */
|
|
.portal-layout {
|
|
display: flex;
|
|
flex-direction: column;
|
|
height: 100vh;
|
|
background: var(--bg-base);
|
|
color: var(--text-primary);
|
|
}
|
|
.portal-topbar {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
height: 48px;
|
|
padding: 0 16px;
|
|
background: var(--bg-surface);
|
|
border-bottom: 1px solid var(--border);
|
|
flex-shrink: 0;
|
|
z-index: 100;
|
|
}
|
|
.portal-topbar-left {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 12px;
|
|
}
|
|
.portal-topbar-center {
|
|
display: flex;
|
|
align-items: center;
|
|
}
|
|
.portal-topbar-right {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
}
|
|
.portal-logo {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 10px;
|
|
cursor: pointer;
|
|
}
|
|
.portal-logo-text {
|
|
display: flex;
|
|
align-items: baseline;
|
|
gap: 6px;
|
|
}
|
|
.portal-logo-name {
|
|
font-size: 14px;
|
|
font-weight: 700;
|
|
color: var(--text-primary);
|
|
}
|
|
.portal-logo-plc {
|
|
font-size: 9px;
|
|
font-weight: 600;
|
|
color: var(--accent);
|
|
letter-spacing: 1.5px;
|
|
}
|
|
.portal-env-badge {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 6px;
|
|
padding: 4px 12px;
|
|
background: rgba(34,197,94,0.1);
|
|
border: 1px solid rgba(34,197,94,0.2);
|
|
border-radius: 12px;
|
|
font-size: 11px;
|
|
font-weight: 600;
|
|
color: #22c55e;
|
|
}
|
|
.env-dot {
|
|
width: 6px;
|
|
height: 6px;
|
|
background: #22c55e;
|
|
border-radius: 50%;
|
|
animation: pulse 2s infinite;
|
|
}
|
|
@keyframes pulse {
|
|
0%, 100% { opacity: 1; }
|
|
50% { opacity: 0.5; }
|
|
}
|
|
.portal-icon-btn {
|
|
position: relative;
|
|
width: 34px;
|
|
height: 34px;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
background: transparent;
|
|
border: 1px solid transparent;
|
|
border-radius: 6px;
|
|
cursor: pointer;
|
|
color: var(--text-secondary);
|
|
transition: all 0.15s;
|
|
}
|
|
.portal-icon-btn:hover {
|
|
background: var(--bg-hover);
|
|
color: var(--text-primary);
|
|
}
|
|
.portal-notif-badge {
|
|
position: absolute;
|
|
top: 4px;
|
|
right: 4px;
|
|
width: 14px;
|
|
height: 14px;
|
|
background: #ef4444;
|
|
border-radius: 50%;
|
|
font-size: 8px;
|
|
font-weight: 700;
|
|
color: white;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
}
|
|
.portal-notif-wrapper, .portal-user-wrapper {
|
|
position: relative;
|
|
}
|
|
.portal-dropdown {
|
|
position: absolute;
|
|
top: 100%;
|
|
right: 0;
|
|
margin-top: 6px;
|
|
min-width: 280px;
|
|
background: var(--bg-elevated);
|
|
border: 1px solid var(--border);
|
|
border-radius: 8px;
|
|
box-shadow: 0 8px 24px rgba(0,0,0,0.4);
|
|
z-index: 200;
|
|
overflow: hidden;
|
|
}
|
|
.portal-dropdown-header {
|
|
padding: 10px 14px;
|
|
font-size: 11px;
|
|
font-weight: 600;
|
|
color: var(--text-secondary);
|
|
text-transform: uppercase;
|
|
letter-spacing: 0.5px;
|
|
border-bottom: 1px solid var(--border);
|
|
}
|
|
.portal-dropdown-item {
|
|
display: flex;
|
|
align-items: flex-start;
|
|
gap: 10px;
|
|
padding: 10px 14px;
|
|
cursor: pointer;
|
|
transition: background 0.1s;
|
|
}
|
|
.portal-dropdown-item:hover {
|
|
background: var(--bg-hover);
|
|
}
|
|
.dropdown-dot {
|
|
width: 8px;
|
|
height: 8px;
|
|
border-radius: 50%;
|
|
margin-top: 4px;
|
|
flex-shrink: 0;
|
|
}
|
|
.dropdown-dot.warning { background: #eab308; }
|
|
.dropdown-dot.info { background: #3b82f6; }
|
|
.dropdown-dot.success { background: #22c55e; }
|
|
.dropdown-title {
|
|
font-size: 12px;
|
|
font-weight: 600;
|
|
color: var(--text-primary);
|
|
}
|
|
.dropdown-desc {
|
|
font-size: 11px;
|
|
color: var(--text-secondary);
|
|
margin-top: 2px;
|
|
}
|
|
.portal-dropdown-section {
|
|
padding: 10px 14px;
|
|
}
|
|
.portal-dropdown-divider {
|
|
height: 1px;
|
|
background: var(--border);
|
|
}
|
|
.portal-dropdown-action {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
width: 100%;
|
|
padding: 8px 14px;
|
|
background: transparent;
|
|
border: none;
|
|
color: var(--text-secondary);
|
|
font-size: 12px;
|
|
cursor: pointer;
|
|
transition: all 0.1s;
|
|
text-align: left;
|
|
}
|
|
.portal-dropdown-action:hover {
|
|
background: var(--bg-hover);
|
|
color: var(--text-primary);
|
|
}
|
|
.portal-dropdown-action.danger:hover {
|
|
color: #ef4444;
|
|
}
|
|
.portal-user-btn {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
padding: 4px 10px;
|
|
background: transparent;
|
|
border: 1px solid transparent;
|
|
border-radius: 6px;
|
|
cursor: pointer;
|
|
color: var(--text-primary);
|
|
transition: all 0.15s;
|
|
}
|
|
.portal-user-btn:hover {
|
|
background: var(--bg-hover);
|
|
border-color: var(--border);
|
|
}
|
|
.portal-avatar {
|
|
width: 28px;
|
|
height: 28px;
|
|
background: var(--accent);
|
|
border-radius: 50%;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
color: white;
|
|
}
|
|
.portal-user-info {
|
|
display: flex;
|
|
flex-direction: column;
|
|
text-align: left;
|
|
}
|
|
.portal-user-name {
|
|
font-size: 12px;
|
|
font-weight: 600;
|
|
}
|
|
.portal-user-role {
|
|
font-size: 10px;
|
|
color: var(--text-secondary);
|
|
text-transform: capitalize;
|
|
}
|
|
.portal-wallet-addr {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 6px;
|
|
font-size: 12px;
|
|
color: var(--text-secondary);
|
|
}
|
|
.copy-btn {
|
|
background: transparent;
|
|
border: none;
|
|
color: var(--text-secondary);
|
|
cursor: pointer;
|
|
padding: 2px;
|
|
}
|
|
.copy-btn:hover { color: var(--accent); }
|
|
.portal-wallet-bal {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
margin-top: 6px;
|
|
font-size: 12px;
|
|
color: var(--text-primary);
|
|
}
|
|
.chain-badge {
|
|
font-size: 10px;
|
|
padding: 2px 6px;
|
|
background: var(--bg-hover);
|
|
border-radius: 4px;
|
|
color: var(--text-secondary);
|
|
}
|
|
|
|
/* ── Portal Body ── */
|
|
.portal-body {
|
|
display: flex;
|
|
flex: 1;
|
|
overflow: hidden;
|
|
}
|
|
.portal-sidebar {
|
|
width: 220px;
|
|
background: var(--bg-surface);
|
|
border-right: 1px solid var(--border);
|
|
display: flex;
|
|
flex-direction: column;
|
|
justify-content: space-between;
|
|
flex-shrink: 0;
|
|
transition: width 0.2s;
|
|
overflow: hidden;
|
|
}
|
|
.portal-sidebar.collapsed {
|
|
width: 56px;
|
|
}
|
|
.portal-nav-items {
|
|
display: flex;
|
|
flex-direction: column;
|
|
padding: 8px;
|
|
gap: 2px;
|
|
}
|
|
.portal-nav-item {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 10px;
|
|
padding: 8px 12px;
|
|
background: transparent;
|
|
border: none;
|
|
border-radius: 6px;
|
|
color: var(--text-secondary);
|
|
font-size: 13px;
|
|
cursor: pointer;
|
|
transition: all 0.1s;
|
|
text-align: left;
|
|
position: relative;
|
|
white-space: nowrap;
|
|
}
|
|
.portal-nav-item:hover {
|
|
background: var(--bg-hover);
|
|
color: var(--text-primary);
|
|
}
|
|
.portal-nav-item.active {
|
|
background: rgba(59,130,246,0.1);
|
|
color: var(--accent);
|
|
}
|
|
.nav-active-indicator {
|
|
position: absolute;
|
|
left: 0;
|
|
top: 50%;
|
|
transform: translateY(-50%);
|
|
width: 3px;
|
|
height: 18px;
|
|
background: var(--accent);
|
|
border-radius: 0 3px 3px 0;
|
|
}
|
|
.portal-nav-footer {
|
|
padding: 8px;
|
|
border-top: 1px solid var(--border);
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 2px;
|
|
}
|
|
.portal-collapse-btn {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
padding: 8px;
|
|
background: transparent;
|
|
border: none;
|
|
border-radius: 6px;
|
|
color: var(--text-secondary);
|
|
cursor: pointer;
|
|
transition: all 0.1s;
|
|
}
|
|
.portal-collapse-btn:hover {
|
|
background: var(--bg-hover);
|
|
color: var(--text-primary);
|
|
}
|
|
.portal-content {
|
|
flex: 1;
|
|
overflow: auto;
|
|
background: var(--bg-base);
|
|
}
|
|
|
|
/* ── Transaction Builder Module Wrapper ── */
|
|
.transaction-builder-module {
|
|
height: 100%;
|
|
display: flex;
|
|
flex-direction: column;
|
|
}
|
|
.transaction-builder-module .app-layout {
|
|
height: 100%;
|
|
}
|
|
|
|
/* ── Page Common Styles ── */
|
|
.page-header {
|
|
display: flex;
|
|
align-items: flex-start;
|
|
justify-content: space-between;
|
|
padding: 24px 28px 16px;
|
|
}
|
|
.page-header h1 {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 10px;
|
|
font-size: 22px;
|
|
font-weight: 700;
|
|
color: var(--text-primary);
|
|
margin: 0;
|
|
}
|
|
.page-subtitle {
|
|
font-size: 13px;
|
|
color: var(--text-secondary);
|
|
margin: 4px 0 0;
|
|
}
|
|
.page-header-actions {
|
|
display: flex;
|
|
gap: 8px;
|
|
}
|
|
.btn-primary {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 6px;
|
|
padding: 8px 16px;
|
|
background: var(--accent);
|
|
border: none;
|
|
border-radius: 6px;
|
|
color: white;
|
|
font-size: 12px;
|
|
font-weight: 600;
|
|
cursor: pointer;
|
|
transition: opacity 0.15s;
|
|
}
|
|
.btn-primary:hover { opacity: 0.9; }
|
|
.btn-secondary {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 6px;
|
|
padding: 8px 16px;
|
|
background: var(--bg-elevated);
|
|
border: 1px solid var(--border);
|
|
border-radius: 6px;
|
|
color: var(--text-secondary);
|
|
font-size: 12px;
|
|
font-weight: 500;
|
|
cursor: pointer;
|
|
transition: all 0.15s;
|
|
}
|
|
.btn-secondary:hover {
|
|
border-color: var(--text-secondary);
|
|
color: var(--text-primary);
|
|
}
|
|
|
|
/* ── Dashboard ── */
|
|
.dashboard-page {
|
|
padding: 0 28px 28px;
|
|
}
|
|
.dashboard-header {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
padding: 24px 0 16px;
|
|
}
|
|
.dashboard-header-left h1 {
|
|
font-size: 22px;
|
|
font-weight: 700;
|
|
margin: 0;
|
|
}
|
|
.dashboard-subtitle {
|
|
font-size: 13px;
|
|
color: var(--text-secondary);
|
|
margin: 4px 0 0;
|
|
}
|
|
.dashboard-header-right {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 12px;
|
|
}
|
|
.time-range-selector {
|
|
display: flex;
|
|
background: var(--bg-elevated);
|
|
border: 1px solid var(--border);
|
|
border-radius: 6px;
|
|
overflow: hidden;
|
|
}
|
|
.time-range-btn {
|
|
padding: 6px 12px;
|
|
background: transparent;
|
|
border: none;
|
|
color: var(--text-secondary);
|
|
font-size: 11px;
|
|
font-weight: 600;
|
|
cursor: pointer;
|
|
transition: all 0.15s;
|
|
}
|
|
.time-range-btn:hover { color: var(--text-primary); }
|
|
.time-range-btn.active {
|
|
background: var(--accent);
|
|
color: white;
|
|
}
|
|
.refresh-btn {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 6px;
|
|
padding: 6px 12px;
|
|
background: var(--bg-elevated);
|
|
border: 1px solid var(--border);
|
|
border-radius: 6px;
|
|
color: var(--text-secondary);
|
|
font-size: 11px;
|
|
cursor: pointer;
|
|
}
|
|
.refresh-btn:hover { color: var(--text-primary); border-color: var(--text-secondary); }
|
|
|
|
/* KPI Cards */
|
|
.kpi-grid {
|
|
display: grid;
|
|
grid-template-columns: repeat(6, 1fr);
|
|
gap: 12px;
|
|
margin-bottom: 16px;
|
|
}
|
|
.kpi-card {
|
|
background: var(--bg-surface);
|
|
border: 1px solid var(--border);
|
|
border-radius: 8px;
|
|
padding: 16px;
|
|
}
|
|
.kpi-header {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
margin-bottom: 8px;
|
|
}
|
|
.kpi-label {
|
|
font-size: 11px;
|
|
font-weight: 500;
|
|
color: var(--text-secondary);
|
|
text-transform: uppercase;
|
|
letter-spacing: 0.3px;
|
|
}
|
|
.kpi-icon { color: var(--text-secondary); }
|
|
.kpi-icon.positive { color: #22c55e; }
|
|
.kpi-icon.negative { color: #ef4444; }
|
|
.kpi-icon.warning { color: #eab308; }
|
|
.kpi-value {
|
|
font-size: 22px;
|
|
font-weight: 700;
|
|
color: var(--text-primary);
|
|
margin-bottom: 4px;
|
|
}
|
|
.kpi-value.positive { color: #22c55e; }
|
|
.kpi-value.negative { color: #ef4444; }
|
|
.kpi-change {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 4px;
|
|
font-size: 11px;
|
|
font-weight: 500;
|
|
}
|
|
.kpi-change.positive { color: #22c55e; }
|
|
.kpi-change.negative { color: #ef4444; }
|
|
.kpi-sub {
|
|
display: flex;
|
|
gap: 8px;
|
|
font-size: 10px;
|
|
color: var(--text-secondary);
|
|
}
|
|
.alert-card { border-color: rgba(234,179,8,0.3); }
|
|
|
|
/* Dashboard Grid */
|
|
.dashboard-grid {
|
|
display: grid;
|
|
grid-template-columns: 1fr 1fr;
|
|
gap: 12px;
|
|
}
|
|
.dashboard-card {
|
|
background: var(--bg-surface);
|
|
border: 1px solid var(--border);
|
|
border-radius: 8px;
|
|
overflow: hidden;
|
|
}
|
|
.card-header {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
padding: 12px 16px;
|
|
border-bottom: 1px solid var(--border);
|
|
}
|
|
.card-header h3 {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
font-size: 13px;
|
|
font-weight: 600;
|
|
color: var(--text-primary);
|
|
margin: 0;
|
|
}
|
|
.card-action {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 4px;
|
|
background: transparent;
|
|
border: none;
|
|
color: var(--accent);
|
|
font-size: 11px;
|
|
cursor: pointer;
|
|
}
|
|
.card-action:hover { text-decoration: underline; }
|
|
.card-header-actions {
|
|
display: flex;
|
|
gap: 8px;
|
|
align-items: center;
|
|
}
|
|
|
|
/* Asset Allocation */
|
|
.allocation-chart { padding: 16px; }
|
|
.allocation-bar {
|
|
display: flex;
|
|
height: 24px;
|
|
border-radius: 4px;
|
|
overflow: hidden;
|
|
margin-bottom: 14px;
|
|
}
|
|
.allocation-segment {
|
|
transition: opacity 0.15s;
|
|
cursor: pointer;
|
|
}
|
|
.allocation-segment:hover { opacity: 0.8; }
|
|
.allocation-legend {
|
|
display: grid;
|
|
grid-template-columns: 1fr 1fr;
|
|
gap: 6px;
|
|
}
|
|
.legend-item {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 6px;
|
|
font-size: 11px;
|
|
}
|
|
.legend-dot {
|
|
width: 8px;
|
|
height: 8px;
|
|
border-radius: 2px;
|
|
flex-shrink: 0;
|
|
}
|
|
.legend-label { color: var(--text-secondary); flex: 1; }
|
|
.legend-value { color: var(--text-primary); font-weight: 500; font-family: 'SF Mono', monospace; font-size: 10px; }
|
|
.legend-pct { color: var(--text-secondary); font-size: 10px; }
|
|
|
|
/* Positions */
|
|
.positions-table { padding: 0; }
|
|
.positions-header {
|
|
display: grid;
|
|
grid-template-columns: 2fr 1fr 1fr;
|
|
padding: 8px 16px;
|
|
font-size: 10px;
|
|
font-weight: 600;
|
|
color: var(--text-secondary);
|
|
text-transform: uppercase;
|
|
letter-spacing: 0.3px;
|
|
border-bottom: 1px solid var(--border);
|
|
}
|
|
.position-row {
|
|
display: grid;
|
|
grid-template-columns: 2fr 1fr 1fr;
|
|
padding: 8px 16px;
|
|
font-size: 12px;
|
|
border-bottom: 1px solid rgba(255,255,255,0.03);
|
|
transition: background 0.1s;
|
|
}
|
|
.position-row:hover { background: var(--bg-hover); }
|
|
.position-name {
|
|
display: flex;
|
|
flex-direction: column;
|
|
}
|
|
.position-asset-class {
|
|
font-size: 9px;
|
|
color: var(--text-secondary);
|
|
text-transform: uppercase;
|
|
letter-spacing: 0.5px;
|
|
}
|
|
|
|
/* Accounts List */
|
|
.accounts-list { padding: 0; }
|
|
.account-row {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
padding: 10px 16px;
|
|
border-bottom: 1px solid rgba(255,255,255,0.03);
|
|
transition: background 0.1s;
|
|
}
|
|
.account-row:hover { background: var(--bg-hover); }
|
|
.account-info {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 10px;
|
|
}
|
|
.account-type-badge {
|
|
font-size: 9px;
|
|
font-weight: 600;
|
|
padding: 2px 6px;
|
|
border-radius: 3px;
|
|
text-transform: uppercase;
|
|
letter-spacing: 0.5px;
|
|
color: var(--text-primary);
|
|
}
|
|
.account-type-badge.operating { background: rgba(59,130,246,0.15); color: #3b82f6; }
|
|
.account-type-badge.treasury { background: rgba(20,184,166,0.15); color: #14b8a6; }
|
|
.account-type-badge.custody { background: rgba(168,85,247,0.15); color: #a855f7; }
|
|
.account-type-badge.stablecoin { background: rgba(16,185,129,0.15); color: #10b981; }
|
|
.account-type-badge.nostro { background: rgba(234,179,8,0.15); color: #eab308; }
|
|
.account-name { font-size: 12px; }
|
|
.account-balance {
|
|
text-align: right;
|
|
display: flex;
|
|
flex-direction: column;
|
|
}
|
|
.account-currency {
|
|
font-size: 10px;
|
|
color: var(--text-secondary);
|
|
}
|
|
|
|
/* Alerts */
|
|
.alerts-list { padding: 0; }
|
|
.alert-row {
|
|
display: flex;
|
|
align-items: flex-start;
|
|
gap: 8px;
|
|
padding: 10px 16px;
|
|
border-bottom: 1px solid rgba(255,255,255,0.03);
|
|
font-size: 11px;
|
|
}
|
|
.alert-severity {
|
|
font-weight: 700;
|
|
font-size: 9px;
|
|
flex-shrink: 0;
|
|
min-width: 55px;
|
|
text-transform: uppercase;
|
|
letter-spacing: 0.5px;
|
|
}
|
|
.alert-category {
|
|
font-weight: 600;
|
|
color: var(--text-primary);
|
|
flex-shrink: 0;
|
|
min-width: 60px;
|
|
}
|
|
.alert-message {
|
|
color: var(--text-secondary);
|
|
line-height: 1.4;
|
|
}
|
|
|
|
/* Activity List */
|
|
.activity-list { padding: 0; }
|
|
.activity-row {
|
|
display: flex;
|
|
align-items: flex-start;
|
|
gap: 10px;
|
|
padding: 8px 16px;
|
|
border-bottom: 1px solid rgba(255,255,255,0.03);
|
|
}
|
|
.activity-dot {
|
|
width: 6px;
|
|
height: 6px;
|
|
border-radius: 50%;
|
|
margin-top: 5px;
|
|
flex-shrink: 0;
|
|
}
|
|
.activity-content {
|
|
flex: 1;
|
|
display: flex;
|
|
flex-direction: column;
|
|
}
|
|
.activity-action {
|
|
font-size: 12px;
|
|
font-weight: 600;
|
|
color: var(--text-primary);
|
|
}
|
|
.activity-detail {
|
|
font-size: 11px;
|
|
color: var(--text-secondary);
|
|
margin-top: 1px;
|
|
}
|
|
.activity-time {
|
|
font-size: 10px;
|
|
color: var(--text-secondary);
|
|
font-family: 'SF Mono', monospace;
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
/* Modules Quick Access */
|
|
.modules-card { grid-column: 1 / -1; }
|
|
.modules-grid {
|
|
display: grid;
|
|
grid-template-columns: repeat(3, 1fr);
|
|
gap: 10px;
|
|
padding: 14px;
|
|
}
|
|
.module-card {
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: center;
|
|
gap: 6px;
|
|
padding: 16px;
|
|
background: var(--bg-elevated);
|
|
border: 1px solid var(--border);
|
|
border-radius: 8px;
|
|
cursor: pointer;
|
|
transition: all 0.15s;
|
|
color: var(--text-primary);
|
|
text-align: center;
|
|
position: relative;
|
|
}
|
|
.module-card:hover {
|
|
border-color: var(--accent);
|
|
background: var(--bg-hover);
|
|
transform: translateY(-1px);
|
|
}
|
|
.module-card:disabled {
|
|
opacity: 0.5;
|
|
cursor: not-allowed;
|
|
}
|
|
.module-name {
|
|
font-size: 13px;
|
|
font-weight: 600;
|
|
}
|
|
.module-desc {
|
|
font-size: 10px;
|
|
color: var(--text-secondary);
|
|
line-height: 1.4;
|
|
}
|
|
.module-badge {
|
|
position: absolute;
|
|
top: 8px;
|
|
right: 8px;
|
|
font-size: 9px;
|
|
padding: 2px 6px;
|
|
background: rgba(168,85,247,0.15);
|
|
color: #a855f7;
|
|
border-radius: 4px;
|
|
font-weight: 600;
|
|
}
|
|
|
|
/* ── Accounts Page ── */
|
|
.accounts-page, .treasury-page, .reporting-page, .compliance-page, .settlements-page, .settings-page {
|
|
padding: 0 28px 28px;
|
|
}
|
|
.accounts-summary, .settlements-summary, .treasury-summary {
|
|
display: grid;
|
|
grid-template-columns: repeat(4, 1fr);
|
|
gap: 12px;
|
|
margin: 0 28px 16px;
|
|
padding: 0;
|
|
}
|
|
.accounts-page .accounts-summary,
|
|
.treasury-page .treasury-summary,
|
|
.settlements-page .settlements-summary {
|
|
margin: 0 0 16px;
|
|
}
|
|
.summary-card {
|
|
background: var(--bg-surface);
|
|
border: 1px solid var(--border);
|
|
border-radius: 8px;
|
|
padding: 14px 16px;
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 4px;
|
|
}
|
|
.summary-label {
|
|
font-size: 11px;
|
|
color: var(--text-secondary);
|
|
text-transform: uppercase;
|
|
letter-spacing: 0.3px;
|
|
}
|
|
.summary-value {
|
|
font-size: 20px;
|
|
font-weight: 700;
|
|
color: var(--text-primary);
|
|
}
|
|
.summary-value.green { color: #22c55e; }
|
|
.summary-value.red { color: #ef4444; }
|
|
.summary-value.orange { color: #f97316; }
|
|
.summary-sub {
|
|
font-size: 10px;
|
|
color: var(--text-secondary);
|
|
}
|
|
|
|
/* Table Toolbar */
|
|
.table-toolbar {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
padding: 10px 0;
|
|
gap: 12px;
|
|
margin-bottom: 4px;
|
|
}
|
|
.table-toolbar-left, .table-toolbar-right {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
}
|
|
.search-input-wrapper {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 6px;
|
|
padding: 6px 10px;
|
|
background: var(--bg-surface);
|
|
border: 1px solid var(--border);
|
|
border-radius: 6px;
|
|
color: var(--text-secondary);
|
|
}
|
|
.search-input-wrapper input {
|
|
background: transparent;
|
|
border: none;
|
|
color: var(--text-primary);
|
|
font-size: 12px;
|
|
outline: none;
|
|
width: 180px;
|
|
}
|
|
.filter-group {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 4px;
|
|
color: var(--text-secondary);
|
|
}
|
|
.filter-group select {
|
|
background: var(--bg-surface);
|
|
border: 1px solid var(--border);
|
|
border-radius: 4px;
|
|
color: var(--text-primary);
|
|
font-size: 11px;
|
|
padding: 5px 8px;
|
|
outline: none;
|
|
}
|
|
.view-toggle {
|
|
display: flex;
|
|
background: var(--bg-surface);
|
|
border: 1px solid var(--border);
|
|
border-radius: 4px;
|
|
overflow: hidden;
|
|
}
|
|
.view-toggle button {
|
|
padding: 5px 12px;
|
|
background: transparent;
|
|
border: none;
|
|
color: var(--text-secondary);
|
|
font-size: 11px;
|
|
cursor: pointer;
|
|
}
|
|
.view-toggle button.active {
|
|
background: var(--accent);
|
|
color: white;
|
|
}
|
|
|
|
/* Account Table */
|
|
.account-table {
|
|
background: var(--bg-surface);
|
|
border: 1px solid var(--border);
|
|
border-radius: 8px;
|
|
overflow: hidden;
|
|
}
|
|
.account-table-header {
|
|
display: grid;
|
|
grid-template-columns: 2.5fr 0.7fr 1.2fr 1.2fr 0.8fr 1.5fr 0.8fr 0.8fr;
|
|
padding: 10px 16px;
|
|
font-size: 10px;
|
|
font-weight: 600;
|
|
color: var(--text-secondary);
|
|
text-transform: uppercase;
|
|
letter-spacing: 0.3px;
|
|
border-bottom: 1px solid var(--border);
|
|
background: var(--bg-elevated);
|
|
}
|
|
.account-table-body {
|
|
max-height: 500px;
|
|
overflow-y: auto;
|
|
}
|
|
.account-table-row {
|
|
display: grid;
|
|
grid-template-columns: 2.5fr 0.7fr 1.2fr 1.2fr 0.8fr 1.5fr 0.8fr 0.8fr;
|
|
padding: 8px 16px;
|
|
font-size: 12px;
|
|
border-bottom: 1px solid rgba(255,255,255,0.03);
|
|
align-items: center;
|
|
transition: background 0.1s;
|
|
}
|
|
.account-table-row:hover { background: var(--bg-hover); }
|
|
.account-table-name {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
}
|
|
.expand-btn {
|
|
background: transparent;
|
|
border: none;
|
|
color: var(--text-secondary);
|
|
cursor: pointer;
|
|
padding: 2px;
|
|
display: flex;
|
|
}
|
|
.expand-placeholder { width: 18px; }
|
|
.account-type-dot {
|
|
width: 8px;
|
|
height: 8px;
|
|
border-radius: 50%;
|
|
flex-shrink: 0;
|
|
}
|
|
.account-name-text {
|
|
font-weight: 500;
|
|
color: var(--text-primary);
|
|
display: block;
|
|
}
|
|
.account-type-label {
|
|
font-size: 10px;
|
|
color: var(--text-secondary);
|
|
text-transform: capitalize;
|
|
display: block;
|
|
}
|
|
.account-table-cell {
|
|
font-size: 12px;
|
|
color: var(--text-primary);
|
|
}
|
|
.account-table-cell.balance { font-weight: 600; }
|
|
.account-status-badge {
|
|
font-size: 10px;
|
|
font-weight: 600;
|
|
padding: 2px 8px;
|
|
border-radius: 4px;
|
|
text-transform: capitalize;
|
|
}
|
|
.account-status-badge.active { background: rgba(34,197,94,0.15); color: #22c55e; }
|
|
.account-status-badge.frozen { background: rgba(249,115,22,0.15); color: #f97316; }
|
|
.account-status-badge.closed { background: rgba(107,114,128,0.15); color: #6b7280; }
|
|
.swift-badge {
|
|
font-size: 9px;
|
|
padding: 1px 4px;
|
|
background: rgba(59,130,246,0.1);
|
|
border-radius: 2px;
|
|
color: var(--accent);
|
|
margin-left: 4px;
|
|
}
|
|
.row-action-btn {
|
|
background: transparent;
|
|
border: none;
|
|
color: var(--text-secondary);
|
|
cursor: pointer;
|
|
padding: 4px;
|
|
border-radius: 3px;
|
|
}
|
|
.row-action-btn:hover { color: var(--text-primary); background: var(--bg-hover); }
|
|
.account-table-cell.actions {
|
|
display: flex;
|
|
gap: 2px;
|
|
}
|
|
.small { font-size: 10px; }
|
|
.mono { font-family: 'SF Mono', 'Fira Code', monospace; }
|
|
|
|
/* ── Treasury Page ── */
|
|
.treasury-grid {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 12px;
|
|
}
|
|
.positions-table-card, .forecast-card {
|
|
width: 100%;
|
|
}
|
|
.treasury-table { overflow-x: auto; }
|
|
.treasury-table-header {
|
|
display: grid;
|
|
grid-template-columns: 1.8fr 1fr 1fr 1fr 1fr 1.2fr 1fr;
|
|
padding: 10px 16px;
|
|
font-size: 10px;
|
|
font-weight: 600;
|
|
color: var(--text-secondary);
|
|
text-transform: uppercase;
|
|
letter-spacing: 0.3px;
|
|
border-bottom: 1px solid var(--border);
|
|
background: var(--bg-elevated);
|
|
}
|
|
.treasury-table-row {
|
|
display: grid;
|
|
grid-template-columns: 1.8fr 1fr 1fr 1fr 1fr 1.2fr 1fr;
|
|
padding: 10px 16px;
|
|
font-size: 12px;
|
|
border-bottom: 1px solid rgba(255,255,255,0.03);
|
|
align-items: center;
|
|
}
|
|
.treasury-table-row:hover { background: var(--bg-hover); }
|
|
.instrument-name { font-weight: 500; }
|
|
.asset-class-badge {
|
|
font-size: 9px;
|
|
padding: 2px 6px;
|
|
background: var(--bg-hover);
|
|
border-radius: 3px;
|
|
color: var(--text-secondary);
|
|
}
|
|
.positive { color: #22c55e; }
|
|
.negative { color: #ef4444; }
|
|
.custodian-name { font-size: 11px; color: var(--text-secondary); }
|
|
|
|
/* Cash Forecast */
|
|
.forecast-chart {
|
|
display: flex;
|
|
align-items: flex-end;
|
|
gap: 4px;
|
|
height: 160px;
|
|
padding: 16px;
|
|
}
|
|
.forecast-bar-wrapper {
|
|
flex: 1;
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: center;
|
|
height: 100%;
|
|
justify-content: flex-end;
|
|
}
|
|
.forecast-bar {
|
|
width: 100%;
|
|
background: rgba(59,130,246,0.3);
|
|
border-radius: 2px 2px 0 0;
|
|
transition: height 0.3s;
|
|
min-height: 4px;
|
|
}
|
|
.forecast-bar.actual {
|
|
background: var(--accent);
|
|
}
|
|
.forecast-label {
|
|
font-size: 8px;
|
|
color: var(--text-secondary);
|
|
margin-top: 4px;
|
|
white-space: nowrap;
|
|
}
|
|
.forecast-legend {
|
|
display: flex;
|
|
gap: 16px;
|
|
padding: 0 16px 12px;
|
|
font-size: 10px;
|
|
color: var(--text-secondary);
|
|
}
|
|
.legend-dot.actual { background: var(--accent); }
|
|
.legend-dot.projected { background: rgba(59,130,246,0.3); }
|
|
|
|
/* ── Reporting Page ── */
|
|
.standards-tabs {
|
|
display: flex;
|
|
gap: 8px;
|
|
margin: 0 28px 12px;
|
|
padding: 0;
|
|
}
|
|
.reporting-page .standards-tabs { margin: 0 0 12px; }
|
|
.standard-tab {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
padding: 10px 18px;
|
|
background: var(--bg-surface);
|
|
border: 1px solid var(--border);
|
|
border-radius: 6px;
|
|
color: var(--text-secondary);
|
|
font-size: 13px;
|
|
font-weight: 600;
|
|
cursor: pointer;
|
|
transition: all 0.15s;
|
|
}
|
|
.standard-tab:hover { border-color: var(--text-secondary); }
|
|
.standard-tab.active {
|
|
background: var(--bg-elevated);
|
|
}
|
|
.standard-dot {
|
|
width: 8px;
|
|
height: 8px;
|
|
border-radius: 50%;
|
|
}
|
|
.standard-count {
|
|
font-size: 10px;
|
|
padding: 1px 6px;
|
|
background: var(--bg-hover);
|
|
border-radius: 8px;
|
|
}
|
|
.standard-detail-card {
|
|
background: var(--bg-surface);
|
|
border: 1px solid var(--border);
|
|
border-radius: 8px;
|
|
padding: 18px 20px;
|
|
margin-bottom: 16px;
|
|
}
|
|
.standard-detail-header {
|
|
display: flex;
|
|
align-items: flex-start;
|
|
justify-content: space-between;
|
|
margin-bottom: 8px;
|
|
}
|
|
.standard-detail-header h3 { margin: 0; font-size: 16px; font-weight: 700; }
|
|
.standard-full-name {
|
|
font-size: 11px;
|
|
color: var(--text-secondary);
|
|
margin-top: 2px;
|
|
}
|
|
.jurisdiction-badge {
|
|
font-size: 10px;
|
|
padding: 3px 8px;
|
|
background: var(--bg-hover);
|
|
border-radius: 4px;
|
|
color: var(--text-secondary);
|
|
}
|
|
.standard-description {
|
|
font-size: 12px;
|
|
color: var(--text-secondary);
|
|
line-height: 1.5;
|
|
margin: 0 0 12px;
|
|
}
|
|
.key-statements-label {
|
|
font-size: 10px;
|
|
font-weight: 600;
|
|
color: var(--text-secondary);
|
|
text-transform: uppercase;
|
|
letter-spacing: 0.3px;
|
|
}
|
|
.statements-list {
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
gap: 6px;
|
|
margin-top: 6px;
|
|
}
|
|
.statement-badge {
|
|
font-size: 10px;
|
|
padding: 3px 8px;
|
|
background: var(--bg-elevated);
|
|
border: 1px solid var(--border);
|
|
border-radius: 4px;
|
|
color: var(--text-primary);
|
|
}
|
|
|
|
/* Reports Table */
|
|
.reports-table { overflow-x: auto; }
|
|
.reports-table-header {
|
|
display: grid;
|
|
grid-template-columns: 2fr 0.8fr 1.2fr 0.8fr 0.8fr 0.8fr 0.7fr 0.7fr;
|
|
padding: 10px 16px;
|
|
font-size: 10px;
|
|
font-weight: 600;
|
|
color: var(--text-secondary);
|
|
text-transform: uppercase;
|
|
letter-spacing: 0.3px;
|
|
border-bottom: 1px solid var(--border);
|
|
background: var(--bg-elevated);
|
|
}
|
|
.reports-table-row {
|
|
display: grid;
|
|
grid-template-columns: 2fr 0.8fr 1.2fr 0.8fr 0.8fr 0.8fr 0.7fr 0.7fr;
|
|
padding: 10px 16px;
|
|
font-size: 12px;
|
|
border-bottom: 1px solid rgba(255,255,255,0.03);
|
|
align-items: center;
|
|
}
|
|
.reports-table-row:hover { background: var(--bg-hover); }
|
|
.report-name { font-weight: 500; }
|
|
.standard-badge {
|
|
font-size: 9px;
|
|
font-weight: 600;
|
|
padding: 2px 6px;
|
|
border: 1px solid;
|
|
border-radius: 3px;
|
|
}
|
|
.report-type { text-transform: capitalize; font-size: 11px; color: var(--text-secondary); }
|
|
.report-period { text-transform: capitalize; font-size: 11px; }
|
|
.report-status {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 4px;
|
|
font-size: 11px;
|
|
font-weight: 500;
|
|
text-transform: capitalize;
|
|
}
|
|
.report-actions {
|
|
display: flex;
|
|
gap: 4px;
|
|
}
|
|
|
|
/* ── Compliance Page ── */
|
|
.compliance-metrics {
|
|
display: grid;
|
|
grid-template-columns: repeat(4, 1fr);
|
|
gap: 12px;
|
|
margin-bottom: 16px;
|
|
}
|
|
.metric-card {
|
|
background: var(--bg-surface);
|
|
border: 1px solid var(--border);
|
|
border-radius: 8px;
|
|
padding: 14px 16px;
|
|
}
|
|
.metric-header {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
margin-bottom: 6px;
|
|
}
|
|
.metric-label {
|
|
font-size: 11px;
|
|
color: var(--text-secondary);
|
|
text-transform: uppercase;
|
|
letter-spacing: 0.3px;
|
|
}
|
|
.metric-value {
|
|
font-size: 20px;
|
|
font-weight: 700;
|
|
margin-bottom: 2px;
|
|
}
|
|
.metric-sub {
|
|
font-size: 10px;
|
|
color: var(--text-secondary);
|
|
margin-bottom: 8px;
|
|
}
|
|
.metric-bar {
|
|
height: 4px;
|
|
background: var(--bg-hover);
|
|
border-radius: 2px;
|
|
overflow: hidden;
|
|
}
|
|
.metric-bar-fill {
|
|
height: 100%;
|
|
border-radius: 2px;
|
|
transition: width 0.3s;
|
|
}
|
|
.compliance-grid {
|
|
display: grid;
|
|
grid-template-columns: 1.5fr 1fr;
|
|
gap: 12px;
|
|
}
|
|
.alert-table-row {
|
|
display: flex;
|
|
align-items: flex-start;
|
|
gap: 8px;
|
|
padding: 10px 16px;
|
|
border-bottom: 1px solid rgba(255,255,255,0.03);
|
|
font-size: 11px;
|
|
}
|
|
.alert-sev-badge {
|
|
font-size: 9px;
|
|
font-weight: 700;
|
|
padding: 2px 6px;
|
|
border: 1px solid;
|
|
border-radius: 3px;
|
|
flex-shrink: 0;
|
|
text-transform: uppercase;
|
|
letter-spacing: 0.5px;
|
|
}
|
|
.alert-cat {
|
|
font-weight: 600;
|
|
color: var(--text-primary);
|
|
flex-shrink: 0;
|
|
min-width: 50px;
|
|
}
|
|
.alert-msg {
|
|
color: var(--text-secondary);
|
|
flex: 1;
|
|
line-height: 1.4;
|
|
}
|
|
.alert-status-badge {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 3px;
|
|
font-size: 10px;
|
|
text-transform: capitalize;
|
|
flex-shrink: 0;
|
|
}
|
|
.alert-time {
|
|
flex-shrink: 0;
|
|
font-size: 10px;
|
|
color: var(--text-secondary);
|
|
}
|
|
.alert-assigned {
|
|
flex-shrink: 0;
|
|
font-size: 10px;
|
|
color: var(--accent);
|
|
}
|
|
.regulatory-list { padding: 0; }
|
|
.regulatory-row {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
padding: 10px 16px;
|
|
border-bottom: 1px solid rgba(255,255,255,0.03);
|
|
}
|
|
.regulatory-info {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 3px;
|
|
}
|
|
.regulatory-name {
|
|
font-size: 12px;
|
|
font-weight: 500;
|
|
color: var(--text-primary);
|
|
}
|
|
.regulatory-status {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 4px;
|
|
font-size: 10px;
|
|
text-transform: capitalize;
|
|
}
|
|
.regulatory-status.compliant { color: #22c55e; }
|
|
.regulatory-status.review_needed { color: #eab308; }
|
|
.regulatory-dates {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 2px;
|
|
text-align: right;
|
|
font-size: 10px;
|
|
color: var(--text-secondary);
|
|
}
|
|
|
|
/* ── Settlements Page ── */
|
|
.settlements-table { overflow-x: auto; }
|
|
.settlements-table-header {
|
|
display: grid;
|
|
grid-template-columns: 1.2fr 0.6fr 0.8fr 1fr 0.6fr 1.2fr 1fr 1fr 0.7fr;
|
|
padding: 10px 16px;
|
|
font-size: 10px;
|
|
font-weight: 600;
|
|
color: var(--text-secondary);
|
|
text-transform: uppercase;
|
|
letter-spacing: 0.3px;
|
|
border-bottom: 1px solid var(--border);
|
|
background: var(--bg-elevated);
|
|
}
|
|
.settlements-table-row {
|
|
display: grid;
|
|
grid-template-columns: 1.2fr 0.6fr 0.8fr 1fr 0.6fr 1.2fr 1fr 1fr 0.7fr;
|
|
padding: 10px 16px;
|
|
font-size: 12px;
|
|
border-bottom: 1px solid rgba(255,255,255,0.03);
|
|
align-items: center;
|
|
}
|
|
.settlements-table-row:hover { background: var(--bg-hover); }
|
|
.type-badge {
|
|
font-size: 9px;
|
|
font-weight: 600;
|
|
padding: 2px 8px;
|
|
border: 1px solid;
|
|
border-radius: 3px;
|
|
}
|
|
.settlement-status {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 4px;
|
|
font-size: 11px;
|
|
font-weight: 500;
|
|
text-transform: capitalize;
|
|
}
|
|
.csd-badge {
|
|
font-size: 10px;
|
|
padding: 2px 6px;
|
|
background: var(--bg-hover);
|
|
border-radius: 3px;
|
|
color: var(--text-secondary);
|
|
}
|
|
|
|
/* ── Settings Page ── */
|
|
.settings-grid {
|
|
display: grid;
|
|
grid-template-columns: 1fr 1fr;
|
|
gap: 12px;
|
|
}
|
|
.settings-section {
|
|
padding: 12px 16px;
|
|
}
|
|
.setting-row {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
padding: 8px 0;
|
|
border-bottom: 1px solid rgba(255,255,255,0.03);
|
|
}
|
|
.setting-label {
|
|
font-size: 12px;
|
|
color: var(--text-secondary);
|
|
}
|
|
.setting-value {
|
|
font-size: 12px;
|
|
color: var(--text-primary);
|
|
font-weight: 500;
|
|
}
|
|
.permissions-list {
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
gap: 6px;
|
|
}
|
|
.permission-badge {
|
|
font-size: 10px;
|
|
padding: 3px 8px;
|
|
background: rgba(59,130,246,0.1);
|
|
border: 1px solid rgba(59,130,246,0.2);
|
|
border-radius: 4px;
|
|
color: var(--accent);
|
|
}
|
|
|
|
/* ================================================================= */
|
|
/* /transactions page (PR G — arch step 8) */
|
|
/* ================================================================= */
|
|
|
|
.transactions-page { padding: 24px; display: flex; flex-direction: column; gap: 20px; }
|
|
.transactions-page .back-button {
|
|
background: none; border: none; color: var(--accent);
|
|
cursor: pointer; font-size: 13px; padding: 0; margin-bottom: 8px;
|
|
}
|
|
.transactions-page .back-button:hover { text-decoration: underline; }
|
|
|
|
.source-badge {
|
|
font-size: 10px; letter-spacing: 0.08em; padding: 2px 8px;
|
|
border-radius: 10px; font-weight: 600; text-transform: uppercase;
|
|
}
|
|
.source-badge--live { background: rgba(34,197,94,0.15); color: #22c55e; }
|
|
.source-badge--degraded { background: rgba(239,68,68,0.15); color: #ef4444; }
|
|
.source-badge--mocked { background: rgba(148,163,184,0.20); color: #94a3b8; }
|
|
|
|
.portal-table { width: 100%; border-collapse: collapse; font-size: 13px; }
|
|
.portal-table th, .portal-table td { padding: 10px 12px; text-align: left; border-bottom: 1px solid rgba(148,163,184,0.12); }
|
|
.portal-table th { font-size: 11px; text-transform: uppercase; letter-spacing: 0.06em; color: #94a3b8; font-weight: 600; }
|
|
.portal-table tbody tr { transition: background 0.12s ease; }
|
|
.portal-table .portal-table-row { cursor: pointer; }
|
|
.portal-table .portal-table-row:hover { background: rgba(99,102,241,0.06); }
|
|
.portal-table .mono { font-family: ui-monospace, Menlo, Consolas, monospace; font-size: 12px; }
|
|
.portal-table .truncate { max-width: 180px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
.portal-table .row-chevron { color: #64748b; }
|
|
|
|
.state-chip, .role-chip {
|
|
display: inline-flex; align-items: center; gap: 6px;
|
|
padding: 3px 10px; border-radius: 999px; font-size: 11px;
|
|
font-weight: 600; letter-spacing: 0.04em; text-transform: uppercase;
|
|
background: rgba(99,102,241,0.14); color: #a5b4fc;
|
|
}
|
|
.state-chip--committed { background: rgba(34,197,94,0.15); color: #22c55e; }
|
|
.state-chip--aborted { background: rgba(239,68,68,0.15); color: #ef4444; }
|
|
.state-chip--validating,
|
|
.state-chip--executing,
|
|
.state-chip--partially_executed { background: rgba(245,158,11,0.15); color: #f59e0b; }
|
|
.state-chip--draft { background: rgba(148,163,184,0.18); color: #cbd5e1; }
|
|
.state-chip--closed { background: rgba(148,163,184,0.25); color: #e2e8f0; }
|
|
|
|
.role-chip--submitter { background: rgba(99,102,241,0.14); color: #a5b4fc; }
|
|
.role-chip--approver { background: rgba(245,158,11,0.14); color: #f59e0b; }
|
|
.role-chip--releaser { background: rgba(14,165,233,0.14); color: #38bdf8; }
|
|
.role-chip--validator { background: rgba(168,85,247,0.14); color: #c084fc; }
|
|
.role-chip--coordinator{ background: rgba(148,163,184,0.18); color: #cbd5e1; }
|
|
|
|
.state-machine-view { padding: 12px 8px 4px; }
|
|
.state-machine-grid {
|
|
display: grid; gap: 10px;
|
|
grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));
|
|
}
|
|
.state-pill {
|
|
display: flex; align-items: center; gap: 10px;
|
|
padding: 10px 14px; border-radius: 10px;
|
|
border: 1px solid rgba(148,163,184,0.18);
|
|
background: rgba(15,23,42,0.35); color: #e2e8f0;
|
|
font-size: 12px; font-weight: 500; letter-spacing: 0.03em;
|
|
}
|
|
.state-pill-dot {
|
|
width: 10px; height: 10px; border-radius: 50%;
|
|
background: rgba(148,163,184,0.45);
|
|
}
|
|
.state-pill--visited { border-color: rgba(99,102,241,0.35); }
|
|
.state-pill--visited .state-pill-dot { background: #818cf8; }
|
|
.state-pill--current {
|
|
border-color: #22c55e;
|
|
box-shadow: 0 0 0 2px rgba(34,197,94,0.18);
|
|
background: rgba(34,197,94,0.08);
|
|
}
|
|
.state-pill--current .state-pill-dot { background: #22c55e; }
|
|
.state-pill--pending { opacity: 0.55; }
|
|
.state-pill--terminal.state-pill--visited { border-color: #f59e0b; }
|
|
.state-machine-legend {
|
|
display: flex; gap: 16px; padding: 12px 4px 0;
|
|
font-size: 11px; color: #94a3b8;
|
|
}
|
|
.legend-item { display: inline-flex; align-items: center; gap: 6px; }
|
|
.legend-item .dot { width: 8px; height: 8px; border-radius: 50%; }
|
|
.legend-item .dot--current { background: #22c55e; }
|
|
.legend-item .dot--visited { background: #818cf8; }
|
|
.legend-item .dot--pending { background: rgba(148,163,184,0.45); }
|
|
|
|
.loading-row, .empty-row { padding: 20px; color: #94a3b8; text-align: center; font-size: 13px; }
|
|
.error-banner {
|
|
padding: 10px 14px; border-radius: 8px; font-size: 12px;
|
|
background: rgba(239,68,68,0.10); color: #fca5a5;
|
|
border: 1px solid rgba(239,68,68,0.25); margin: 8px 0;
|
|
}
|
|
.muted { color: #94a3b8; }
|