/** * v2.2.1 P3 — dashboard CSS extracted from `src/dashboard.ts`. * * Served inline via the same HTML response — NOT a separate route — so the * dashboard stays a single-file-served artifact (no browser caching * concern, no 2nd-GET round-trip on load, no cross-origin surface to * widen). The extraction is purely a source-file split for readability: * v2.2.1 adds themes + inline-action UI on top of this base sheet, and * keeping the CSS + HTML + JS all inline in dashboard.ts pushed the file * toward 1000 LOC before this split. * * Future theme palettes (v2.2.1 P1) live in this same file as additional * exported strings — `:root[data-theme="dark"] { ... }` etc. — so every * color surface stays in one place. */ /** The base stylesheet. Always present; defines the catppuccin default palette via :root. */ export declare const DASHBOARD_BASE_STYLES = "\n :root {\n --bg: #0f1115;\n --panel: #171a21;\n --panel-2: #1d212a;\n --border: #2a2f3b;\n --text: #e4e6eb;\n --muted: #8a92a3;\n --accent: #2D6A4F;\n --online: #4ade80;\n --stale: #fbbf24;\n --offline: #6b7280;\n --critical: #ef4444;\n --high: #f97316;\n --normal: #60a5fa;\n --low: #9ca3af;\n --cards-per-row: 3;\n }\n * { box-sizing: border-box; }\n body {\n margin: 0;\n font-family: -apple-system, BlinkMacSystemFont, \"SF Pro Text\", system-ui, sans-serif;\n background: var(--bg);\n color: var(--text);\n line-height: 1.4;\n }\n header {\n padding: 16px 24px;\n border-bottom: 1px solid var(--border);\n display: flex;\n justify-content: space-between;\n align-items: center;\n }\n header h1 { margin: 0; font-size: 18px; font-weight: 600; letter-spacing: -0.01em; }\n header .meta { color: var(--muted); font-size: 12px; font-variant-numeric: tabular-nums; }\n main { padding: 24px; display: grid; gap: 24px; grid-template-columns: 2fr 1fr; max-width: 1400px; }\n @media (max-width: 900px) { main { grid-template-columns: 1fr; } }\n .controls { display: flex; gap: 12px; align-items: center; flex-wrap: wrap; }\n .controls select, .controls input {\n background: var(--panel-2);\n color: var(--text);\n border: 1px solid var(--border);\n border-radius: 6px;\n padding: 4px 8px;\n font-size: 12px;\n }\n .controls label { color: var(--muted); font-size: 12px; display: inline-flex; gap: 6px; align-items: center; }\n .agents-grid {\n display: grid;\n grid-template-columns: repeat(var(--cards-per-row), minmax(0, 1fr));\n gap: 12px;\n padding: 16px;\n }\n .agent-card {\n background: var(--panel-2);\n border: 1px solid var(--border);\n border-radius: 8px;\n padding: 12px;\n cursor: pointer;\n transition: transform 0.1s, border-color 0.1s;\n }\n .agent-card:hover { border-color: var(--accent); transform: translateY(-1px); }\n .agent-card.focused { border-color: var(--accent); box-shadow: 0 0 0 1px var(--accent); }\n .agent-card .name { font-weight: 600; font-size: 14px; margin-bottom: 4px; }\n .agent-card .role { color: var(--muted); font-size: 11px; text-transform: uppercase; letter-spacing: 0.03em; }\n .agent-card .state { margin-top: 8px; font-size: 12px; }\n .agent-card .seen { color: var(--muted); font-size: 11px; margin-top: 4px; font-variant-numeric: tabular-nums; }\n .agent-card .inbox { margin-top: 6px; font-size: 11px; }\n .inbox-badge {\n display: inline-flex; align-items: center;\n font-size: 11px; padding: 2px 6px; border-radius: 10px;\n font-variant-numeric: tabular-nums;\n }\n .inbox-badge-warn { background: rgba(251,191,36,0.22); color: var(--stale); font-weight: 600; }\n .inbox-badge-zero { background: rgba(107,114,128,0.12); color: var(--muted); }\n .agent-card { position: relative; }\n .agent-card .card-resize {\n position: absolute; right: 2px; bottom: 2px;\n width: 14px; height: 14px;\n cursor: nwse-resize;\n color: var(--muted);\n font-size: 11px; line-height: 14px; text-align: center;\n user-select: none;\n opacity: 0;\n transition: opacity 0.1s;\n }\n .agent-card:hover .card-resize { opacity: 0.7; }\n .agent-card .card-resize:hover { opacity: 1; color: var(--accent); }\n .agent-card .card-reset {\n position: absolute; right: 2px; top: 2px;\n width: 16px; height: 16px;\n background: transparent;\n border: none;\n color: var(--muted);\n font-size: 12px; line-height: 16px;\n cursor: pointer;\n padding: 0;\n border-radius: 3px;\n opacity: 0;\n transition: opacity 0.1s;\n }\n .agent-card[data-resized=\"1\"] .card-reset { opacity: 0.7; }\n .agent-card .card-reset:hover { opacity: 1; background: var(--panel); color: var(--critical); }\n .badge {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-size: 11px;\n padding: 2px 6px;\n border-radius: 10px;\n text-transform: lowercase;\n }\n .badge-idle { background: rgba(74,222,128,0.15); color: var(--online); }\n .badge-working { background: rgba(96,165,250,0.15); color: var(--normal); }\n .badge-blocked { background: rgba(251,191,36,0.15); color: var(--stale); }\n .badge-waiting_user { background: rgba(251,191,36,0.15); color: var(--stale); }\n .badge-stale { background: rgba(251,191,36,0.15); color: var(--stale); }\n .badge-offline { background: rgba(107,114,128,0.15); color: var(--offline); }\n .badge-closed { background: rgba(107,114,128,0.12); color: var(--offline); text-decoration: line-through; }\n .badge-abandoned { background: rgba(107,114,128,0.1); color: var(--muted); font-style: italic; }\n /* v2.15.0 \u2014 'unknown' (no liveness data): a distinct dashed amber, NOT the\n grey/strikethrough of closed/offline, so \"we don't know\" never reads \"dead\". */\n .badge-unknown { background: rgba(251,191,36,0.10); color: var(--stale); border: 1px dashed var(--stale); }\n .msg-list { list-style: none; padding: 0; margin: 0; }\n .msg-row {\n display: block;\n width: 100%;\n background: transparent;\n border: none;\n border-bottom: 1px solid var(--border);\n color: var(--text);\n text-align: left;\n padding: 10px 16px;\n font-size: 13px;\n cursor: pointer;\n font-family: inherit;\n }\n .msg-row:hover { background: var(--panel-2); }\n .msg-row:last-child { border-bottom: none; }\n .msg-row[aria-expanded=\"true\"] .msg-full { display: block; }\n .msg-full { display: none; margin-top: 6px; color: var(--muted); font-size: 12px; white-space: pre-wrap; word-break: break-word; }\n .focused-agent {\n margin: 0 24px 24px;\n padding: 16px;\n background: var(--panel);\n border: 1px solid var(--accent);\n border-radius: 10px;\n display: none;\n }\n .focused-agent.visible { display: block; }\n .focused-agent h3 { margin: 0 0 12px 0; font-size: 14px; }\n .focused-actions { display: flex; gap: 8px; margin-top: 12px; flex-wrap: wrap; }\n .focused-actions button {\n background: var(--panel-2);\n color: var(--text);\n border: 1px solid var(--border);\n border-radius: 6px;\n padding: 6px 12px;\n font-size: 12px;\n cursor: pointer;\n font-family: inherit;\n }\n .focused-actions button:hover:not(:disabled) { border-color: var(--accent); }\n .focused-actions button:disabled { opacity: 0.5; cursor: not-allowed; }\n .focused-form { display: flex; gap: 6px; margin-top: 10px; }\n .focused-form input[type=\"text\"], .focused-form textarea {\n flex: 1;\n background: var(--panel-2);\n color: var(--text);\n border: 1px solid var(--border);\n border-radius: 6px;\n padding: 6px 10px;\n font-size: 12px;\n font-family: inherit;\n }\n .conn-pill {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 2px 8px;\n border-radius: 10px;\n font-size: 11px;\n background: var(--panel-2);\n color: var(--muted);\n }\n .conn-pill .conn-dot { width: 6px; height: 6px; border-radius: 50%; background: var(--offline); }\n .conn-pill.live .conn-dot { background: var(--online); }\n .panel {\n background: var(--panel);\n border: 1px solid var(--border);\n border-radius: 10px;\n overflow: hidden;\n }\n .panel h2 {\n margin: 0;\n padding: 12px 16px;\n font-size: 13px;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n color: var(--muted);\n border-bottom: 1px solid var(--border);\n background: var(--panel-2);\n }\n .panel-body { padding: 8px 0; max-height: 420px; overflow-y: auto; }\n .row {\n padding: 10px 16px;\n border-bottom: 1px solid var(--border);\n font-size: 13px;\n }\n .row:last-child { border-bottom: none; }\n .row-head { display: flex; justify-content: space-between; align-items: baseline; gap: 8px; }\n .row-title { font-weight: 500; }\n .row-meta { color: var(--muted); font-size: 11px; font-variant-numeric: tabular-nums; white-space: nowrap; }\n .row-body { color: var(--muted); font-size: 12px; margin-top: 4px; word-break: break-word; }\n .dot { display: inline-block; width: 8px; height: 8px; border-radius: 50%; margin-right: 6px; vertical-align: middle; }\n .status-online { background: var(--online); }\n .status-stale { background: var(--stale); }\n .status-offline { background: var(--offline); }\n .tag {\n display: inline-block;\n padding: 1px 6px;\n border-radius: 4px;\n font-size: 10px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.02em;\n margin-right: 6px;\n }\n .tag-critical { background: rgba(239,68,68,0.15); color: var(--critical); }\n .tag-high { background: rgba(249,115,22,0.15); color: var(--high); }\n .tag-normal { background: rgba(96,165,250,0.15); color: var(--normal); }\n .tag-low { background: rgba(156,163,175,0.15); color: var(--low); }\n .tag-posted { background: rgba(96,165,250,0.15); color: var(--normal); }\n .tag-accepted { background: rgba(251,191,36,0.15); color: var(--stale); }\n .tag-completed { background: rgba(74,222,128,0.15); color: var(--online); }\n .tag-rejected { background: rgba(239,68,68,0.15); color: var(--critical); }\n .tag-pending { background: rgba(96,165,250,0.15); color: var(--normal); }\n .tag-read { background: rgba(156,163,175,0.15); color: var(--low); }\n .empty { padding: 24px 16px; text-align: center; color: var(--muted); font-size: 13px; }\n code { font-family: \"SF Mono\", Monaco, Menlo, monospace; font-size: 11px; }\n"; /** * v2.2.1 P1 — theme palettes. * * Each theme overrides the `:root` CSS custom properties under a * `[data-theme=""]` attribute selector. The catppuccin Mocha palette * is the default (declared in DASHBOARD_BASE_STYLES :root, no * data-theme attribute needed). dark/light are tool-neutral contrasts. * `custom` is defined at runtime from the operator's pasted JSON + * applied via inline style on the `` element. * * Token contract (any new theme MUST set all of): * --bg --panel --panel-2 --border --text --muted --accent * --online --stale --offline --critical --high --normal --low * * Adding a theme = add a block here + add an option to the dropdown in * dashboard.ts. No new bundler/build step. */ export declare const DASHBOARD_THEMES = "\n /* catppuccin = default; lives in :root above. data-theme=\"catppuccin\" is a no-op. */\n\n :root[data-theme=\"dark\"] {\n --bg: #121212;\n --panel: #1c1c1c;\n --panel-2: #262626;\n --border: #363636;\n --text: #e6e6e6;\n --muted: #8a8a8a;\n --accent: #5b8cff;\n --online: #3ecf8e;\n --stale: #ffb454;\n --offline: #606060;\n --critical: #ff5c5c;\n --high: #ff914d;\n --normal: #5b8cff;\n --low: #999999;\n }\n\n :root[data-theme=\"light\"] {\n --bg: #fafafa;\n --panel: #ffffff;\n --panel-2: #f1f3f5;\n --border: #d8dce1;\n --text: #1d2433;\n --muted: #6b7280;\n --accent: #2563eb;\n --online: #059669;\n --stale: #d97706;\n --offline: #9ca3af;\n --critical: #dc2626;\n --high: #ea580c;\n --normal: #2563eb;\n --low: #6b7280;\n }\n\n /* custom theme: CSS custom properties are set at runtime by the client\n script via element.style.setProperty('--bg', ...) on . No static\n selector needed \u2014 the inline styles on beat :root tokens. */\n"; //# sourceMappingURL=dashboard-styles.d.ts.map