/* ═══════════════════════════════════════════════════════════════════════════ Logfire — Obsidian Plugin Styles Aesthetic: Utilitarian System Monitor ═══════════════════════════════════════════════════════════════════════════ */ /* --------------------------------------------------------------------------- Event Stream View — Container --------------------------------------------------------------------------- */ .logfire-event-stream { display: flex; flex-direction: column; height: 100%; overflow: hidden; background: var(--background-primary); } /* --------------------------------------------------------------------------- Event Stream — Toolbar --------------------------------------------------------------------------- */ .logfire-stream-toolbar { display: flex; align-items: center; gap: 6px; padding: 8px 10px; border-bottom: 1px solid var(--background-modifier-border); background: var(--background-secondary); flex-shrink: 0; } .logfire-stream-search { flex: 1; min-width: 0; padding: 4px 8px; border: 1px solid var(--background-modifier-border); border-radius: 4px; background: var(--background-primary); color: var(--text-normal); font-family: var(--font-monospace); font-size: 12px; outline: none; transition: border-color 120ms ease; } .logfire-stream-search:focus { border-color: var(--interactive-accent); } .logfire-stream-search::placeholder { color: var(--text-faint); font-style: italic; } .logfire-stream-btn-group { display: flex; gap: 4px; flex-shrink: 0; } .logfire-stream-btn-group button { padding: 3px 10px; border: 1px solid var(--background-modifier-border); border-radius: 4px; background: var(--background-primary); color: var(--text-muted); font-size: 11px; font-family: var(--font-monospace); cursor: pointer; transition: background 100ms ease, color 100ms ease, border-color 100ms ease; letter-spacing: 0.02em; text-transform: uppercase; } .logfire-stream-btn-group button:hover { background: var(--background-modifier-hover); color: var(--text-normal); border-color: var(--text-faint); } .logfire-stream-btn-group button.is-active { background: var(--interactive-accent); color: var(--text-on-accent); border-color: var(--interactive-accent); } /* --------------------------------------------------------------------------- Event Stream — Category Filter Bar --------------------------------------------------------------------------- */ .logfire-stream-categories { display: flex; gap: 2px; padding: 6px 10px; border-bottom: 1px solid var(--background-modifier-border); background: var(--background-secondary); flex-shrink: 0; flex-wrap: wrap; } .logfire-cat-toggle { display: inline-flex; align-items: center; gap: 3px; padding: 2px 7px; border-radius: 3px; font-family: var(--font-monospace); font-size: 10px; letter-spacing: 0.03em; text-transform: uppercase; color: var(--text-muted); cursor: pointer; transition: background 80ms ease, color 80ms ease; user-select: none; line-height: 1; } .logfire-cat-toggle:hover { background: var(--background-modifier-hover); color: var(--text-normal); } .logfire-cat-toggle input[type="checkbox"] { margin: 0; width: 10px; height: 10px; accent-color: var(--interactive-accent); cursor: pointer; } .logfire-cat-toggle span { pointer-events: none; } /* --------------------------------------------------------------------------- Event Stream — List --------------------------------------------------------------------------- */ .logfire-stream-list { flex: 1; overflow-y: auto; overflow-x: hidden; font-family: var(--font-monospace); font-size: 11.5px; line-height: 1.5; padding: 2px 0; } /* Subtle scrollbar */ .logfire-stream-list::-webkit-scrollbar { width: 6px; } .logfire-stream-list::-webkit-scrollbar-track { background: transparent; } .logfire-stream-list::-webkit-scrollbar-thumb { background: var(--background-modifier-border); border-radius: 3px; } .logfire-stream-list::-webkit-scrollbar-thumb:hover { background: var(--text-faint); } /* --------------------------------------------------------------------------- Event Stream — Row --------------------------------------------------------------------------- */ .logfire-stream-row { display: flex; gap: 8px; padding: 2px 10px; border-bottom: 1px solid transparent; transition: background 60ms ease; white-space: nowrap; overflow: hidden; } .logfire-stream-row:hover { background: var(--background-secondary); border-bottom-color: var(--background-modifier-border); } /* Alternating row tint for scanability */ .logfire-stream-row:nth-child(even) { background: color-mix(in srgb, var(--background-secondary) 30%, transparent); } .logfire-stream-row:nth-child(even):hover { background: var(--background-secondary); } /* --------------------------------------------------------------------------- Event Stream — Row Segments --------------------------------------------------------------------------- */ .logfire-stream-time { color: var(--text-faint); flex-shrink: 0; font-variant-numeric: tabular-nums; } .logfire-stream-type { color: var(--text-accent); flex-shrink: 0; font-weight: 600; min-width: 0; } .logfire-stream-source { color: var(--text-normal); overflow: hidden; text-overflow: ellipsis; min-width: 0; flex-shrink: 1; } .logfire-stream-payload { color: var(--text-faint); flex-shrink: 0; margin-left: auto; font-variant-numeric: tabular-nums; } /* --------------------------------------------------------------------------- Status Bar --------------------------------------------------------------------------- */ .logfire-status-bar { cursor: pointer; font-family: var(--font-monospace); font-size: 11px; letter-spacing: 0.01em; padding: 0 4px; font-variant-numeric: tabular-nums; transition: color 100ms ease; } .logfire-status-bar:hover { color: var(--text-accent); } /* --------------------------------------------------------------------------- Scan Modal --------------------------------------------------------------------------- */ .logfire-scan-modal { font-family: var(--font-monospace); } .logfire-scan-modal h2 { font-size: 16px; font-weight: 700; letter-spacing: -0.01em; margin-bottom: 8px; color: var(--text-normal); } .logfire-scan-modal > p { color: var(--text-muted); font-size: 12px; line-height: 1.5; margin-bottom: 16px; } .logfire-scan-progress { margin-bottom: 12px; } .logfire-scan-progress progress { width: 100%; height: 6px; border: none; border-radius: 3px; overflow: hidden; appearance: none; -webkit-appearance: none; } .logfire-scan-progress progress::-webkit-progress-bar { background: var(--background-modifier-border); border-radius: 3px; } .logfire-scan-progress progress::-webkit-progress-value { background: var(--interactive-accent); border-radius: 3px; transition: width 200ms ease; } .logfire-scan-status { font-size: 11.5px; line-height: 1.5; color: var(--text-normal); word-break: break-all; } .logfire-scan-status > div:last-child { color: var(--text-muted); font-variant-numeric: tabular-nums; } .logfire-scan-buttons { display: flex; justify-content: flex-end; gap: 8px; margin-top: 16px; } .logfire-scan-buttons button { font-family: var(--font-monospace); font-size: 12px; letter-spacing: 0.02em; } /* ═══════════════════════════════════════════════════════════════════════════ Query Modal — SQL Console ═══════════════════════════════════════════════════════════════════════════ */ .logfire-query-modal { font-family: var(--font-monospace); } .logfire-query-modal h2 { font-size: 16px; font-weight: 700; letter-spacing: -0.01em; margin-bottom: 10px; color: var(--text-normal); } /* --------------------------------------------------------------------------- Query Modal — Toolbar --------------------------------------------------------------------------- */ .logfire-qm-toolbar { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin-bottom: 8px; } .logfire-qm-toolbar button { padding: 3px 10px; border: 1px solid var(--background-modifier-border); border-radius: 4px; background: var(--background-primary); color: var(--text-muted); font-family: var(--font-monospace); font-size: 11px; letter-spacing: 0.02em; text-transform: uppercase; cursor: pointer; transition: background 100ms ease, color 100ms ease, border-color 100ms ease; } .logfire-qm-toolbar button:hover { background: var(--background-modifier-hover); color: var(--text-normal); border-color: var(--text-faint); } .logfire-qm-hint { color: var(--text-faint); font-size: 10px; letter-spacing: 0.03em; text-transform: uppercase; } /* --------------------------------------------------------------------------- Query Modal — Editor --------------------------------------------------------------------------- */ .logfire-qm-editor { display: block; width: 100%; min-height: 100px; max-height: 200px; padding: 8px 10px; border: 1px solid var(--background-modifier-border); border-radius: 4px; background: var(--background-primary); color: var(--text-normal); font-family: var(--font-monospace); font-size: 12px; line-height: 1.5; resize: vertical; outline: none; tab-size: 2; transition: border-color 120ms ease; } .logfire-qm-editor:focus { border-color: var(--interactive-accent); } .logfire-qm-editor::placeholder { color: var(--text-faint); font-style: italic; } /* --------------------------------------------------------------------------- Query Modal — Buttons --------------------------------------------------------------------------- */ .logfire-qm-buttons { display: flex; gap: 6px; margin-top: 8px; margin-bottom: 12px; flex-wrap: wrap; } .logfire-qm-buttons button { padding: 4px 12px; border: 1px solid var(--background-modifier-border); border-radius: 4px; background: var(--background-primary); color: var(--text-muted); font-family: var(--font-monospace); font-size: 11px; letter-spacing: 0.02em; text-transform: uppercase; cursor: pointer; transition: background 100ms ease, color 100ms ease, border-color 100ms ease; } .logfire-qm-buttons button:hover { background: var(--background-modifier-hover); color: var(--text-normal); border-color: var(--text-faint); } .logfire-qm-buttons button.mod-cta { background: var(--interactive-accent); color: var(--text-on-accent); border-color: var(--interactive-accent); } .logfire-qm-buttons button.mod-cta:hover { filter: brightness(1.1); } /* --------------------------------------------------------------------------- Query Modal — Results --------------------------------------------------------------------------- */ .logfire-qm-results { max-height: 360px; overflow: auto; border: 1px solid var(--background-modifier-border); border-radius: 4px; background: var(--background-primary); } .logfire-qm-results:empty { display: none; } .logfire-qm-results::-webkit-scrollbar { width: 6px; height: 6px; } .logfire-qm-results::-webkit-scrollbar-track { background: transparent; } .logfire-qm-results::-webkit-scrollbar-thumb { background: var(--background-modifier-border); border-radius: 3px; } .logfire-qm-results::-webkit-scrollbar-thumb:hover { background: var(--text-faint); } .logfire-qm-truncated { padding: 4px 10px; font-size: 10px; color: var(--text-faint); letter-spacing: 0.02em; text-transform: uppercase; border-top: 1px solid var(--background-modifier-border); } /* ═══════════════════════════════════════════════════════════════════════════ Data Table — Inline Query Results ═══════════════════════════════════════════════════════════════════════════ */ .logfire-table { width: 100%; border-collapse: collapse; font-family: var(--font-monospace); font-size: 11.5px; line-height: 1.4; font-variant-numeric: tabular-nums; } .logfire-table thead th { padding: 5px 10px; text-align: left; font-weight: 600; font-size: 10px; letter-spacing: 0.04em; text-transform: uppercase; color: var(--text-muted); background: var(--background-secondary); border-bottom: 2px solid var(--background-modifier-border); position: sticky; top: 0; z-index: 1; white-space: nowrap; } .logfire-table tbody td { padding: 3px 10px; color: var(--text-normal); border-bottom: 1px solid color-mix(in srgb, var(--background-modifier-border) 50%, transparent); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 300px; } .logfire-table tbody tr:nth-child(even) { background: color-mix(in srgb, var(--background-secondary) 30%, transparent); } .logfire-table tbody tr:hover { background: var(--background-secondary); } .logfire-table tbody tr:hover td { border-bottom-color: var(--background-modifier-border); } /* --------------------------------------------------------------------------- Timeline --------------------------------------------------------------------------- */ .logfire-timeline { list-style: none; padding: 0; margin: 0; font-family: var(--font-monospace); font-size: 11.5px; line-height: 1.5; } .logfire-timeline li { padding: 2px 10px; color: var(--text-normal); border-left: 2px solid var(--background-modifier-border); margin-left: 6px; transition: border-color 80ms ease; } .logfire-timeline li:hover { border-left-color: var(--interactive-accent); background: color-mix(in srgb, var(--background-secondary) 40%, transparent); } /* --------------------------------------------------------------------------- Summary — Key-Value Readout --------------------------------------------------------------------------- */ .logfire-summary { font-family: var(--font-monospace); font-size: 12px; line-height: 1.6; padding: 6px 0; } .logfire-summary > div { padding: 2px 10px; border-bottom: 1px solid color-mix(in srgb, var(--background-modifier-border) 40%, transparent); } .logfire-summary > div:last-child { border-bottom: none; } .logfire-summary strong { color: var(--text-muted); font-weight: 600; letter-spacing: 0.01em; } /* --------------------------------------------------------------------------- Metric — Single Value Readout --------------------------------------------------------------------------- */ .logfire-metric { font-family: var(--font-monospace); font-variant-numeric: tabular-nums; color: var(--text-accent); font-weight: 700; letter-spacing: -0.02em; padding: 8px 10px; line-height: 1; } /* --------------------------------------------------------------------------- List --------------------------------------------------------------------------- */ .logfire-list { list-style: none; padding: 0; margin: 0; font-family: var(--font-monospace); font-size: 11.5px; line-height: 1.5; } .logfire-list li { padding: 2px 10px; color: var(--text-normal); border-bottom: 1px solid color-mix(in srgb, var(--background-modifier-border) 40%, transparent); } .logfire-list li:last-child { border-bottom: none; } .logfire-list li:hover { background: color-mix(in srgb, var(--background-secondary) 40%, transparent); } /* --------------------------------------------------------------------------- Heatmap — Text-Based Bar Readout --------------------------------------------------------------------------- */ .logfire-heatmap { font-family: var(--font-monospace); font-size: 11px; line-height: 1.6; padding: 4px 0; font-variant-numeric: tabular-nums; } .logfire-heatmap > div { padding: 1px 10px; color: var(--text-normal); white-space: pre; transition: background 60ms ease; } .logfire-heatmap > div:hover { background: color-mix(in srgb, var(--background-secondary) 40%, transparent); } /* --------------------------------------------------------------------------- Empty State & Error --------------------------------------------------------------------------- */ .logfire-empty { padding: 12px 10px; color: var(--text-faint); font-family: var(--font-monospace); font-size: 11.5px; font-style: italic; } .logfire-error { padding: 8px 10px; margin: 0; font-family: var(--font-monospace); font-size: 11.5px; line-height: 1.5; color: var(--text-error, #e5534b); background: color-mix(in srgb, var(--text-error, #e5534b) 8%, var(--background-primary)); border-left: 3px solid var(--text-error, #e5534b); border-radius: 0 4px 4px 0; white-space: pre-wrap; word-break: break-word; }