appendLinkified had one caller, the flow page, and it pulled in the path-link and file-preview chain, the side-panel singleton, the marked and DOMPurify wiring and the css only they used. The docs stop describing the dashboard side panel and the client reading file_refs.
315 lines
9.1 KiB
CSS
315 lines
9.1 KiB
CSS
/* Shared Catppuccin palette + body typography + terminal pane styles.
|
|
Bundled in front of the page-specific rules via esbuild. */
|
|
@import "@hive/shared/base.css";
|
|
@import "@hive/shared/terminal.css";
|
|
@import "@hive/shared/tabs.css";
|
|
@import "@hive/shared/chrome.css";
|
|
/* Shared pill/chip/badge shape (the "extract pill component" issue,
|
|
resolved as shared CSS rather than a JS component) — see pill.css
|
|
itself for the classnames it covers. */
|
|
@import "@hive/shared/pill.css";
|
|
|
|
/* ─── global typography ─────────────────────────────────────────────
|
|
Element-level rules shared across every page. These must not
|
|
reference page-specific chrome classes. */
|
|
|
|
h1,
|
|
h2 {
|
|
color: var(--purple);
|
|
text-transform: uppercase;
|
|
letter-spacing: 0.15em;
|
|
margin-top: 2em;
|
|
text-shadow: 0 0 8px color-mix(in srgb, var(--purple) 40%, transparent);
|
|
}
|
|
.divider {
|
|
color: var(--purple-dim);
|
|
overflow: hidden;
|
|
white-space: nowrap;
|
|
margin-bottom: 0.5em;
|
|
}
|
|
ul {
|
|
list-style: none;
|
|
padding-left: 0;
|
|
}
|
|
li {
|
|
padding: 0.5em 0;
|
|
}
|
|
.glyph {
|
|
color: var(--purple);
|
|
margin-right: 0.5em;
|
|
}
|
|
a {
|
|
color: var(--cyan);
|
|
text-decoration: none;
|
|
font-weight: bold;
|
|
text-shadow: 0 0 4px color-mix(in srgb, var(--cyan) 50%, transparent);
|
|
}
|
|
a:hover {
|
|
color: var(--fg);
|
|
text-shadow: 0 0 12px color-mix(in srgb, var(--cyan) 90%, transparent);
|
|
}
|
|
code {
|
|
color: var(--amber);
|
|
background: var(--bg-elev);
|
|
padding: 0.1em 0.4em;
|
|
border: 1px solid var(--border);
|
|
border-radius: 2px;
|
|
font-size: 0.9em;
|
|
}
|
|
|
|
/* ─── shared inline labels ──────────────────────────────────────────
|
|
.meta / .id / .agent / .empty appear in message rows, build-log
|
|
toolbars, and side-panel content rendered by common.js. */
|
|
.meta {
|
|
color: var(--muted);
|
|
font-size: 0.85em;
|
|
margin-left: 0.4em;
|
|
}
|
|
.id {
|
|
color: var(--pink);
|
|
font-weight: bold;
|
|
margin-right: 0.4em;
|
|
}
|
|
.agent {
|
|
color: var(--amber);
|
|
font-weight: bold;
|
|
margin-right: 0.6em;
|
|
}
|
|
.empty {
|
|
color: var(--muted);
|
|
font-style: italic;
|
|
}
|
|
|
|
/* ─── status badges ─────────────────────────────────────────────────
|
|
Semantic colour variants only — shape comes from `hive-pill-sm`
|
|
(shared with the agent UI's pill/chip family, @hive/shared/pill.css),
|
|
carried directly in the markup alongside each of these classnames
|
|
(agents.js/kept.js/builds.js). Used on container rows and build-log
|
|
rows. */
|
|
.badge-warn {
|
|
color: var(--amber);
|
|
border-color: var(--amber);
|
|
text-shadow: 0 0 6px color-mix(in srgb, var(--amber) 50%, transparent);
|
|
}
|
|
.badge-rate-limited {
|
|
color: var(--red);
|
|
border-color: var(--red);
|
|
text-shadow: 0 0 6px color-mix(in srgb, var(--red) 50%, transparent);
|
|
}
|
|
.badge-muted {
|
|
color: var(--muted);
|
|
border-color: var(--purple-dim);
|
|
background: color-mix(in srgb, var(--muted) 8%, transparent);
|
|
}
|
|
.badge-loose-ends {
|
|
color: var(--purple);
|
|
border-color: var(--purple);
|
|
text-shadow: 0 0 6px color-mix(in srgb, var(--purple) 40%, transparent);
|
|
}
|
|
/* Paused agent: turn loop parked, container still up. Clickable (btn-inline):
|
|
clicking sends POST /api/resume/{name} so the badge doubles as a resume button. */
|
|
.badge-paused {
|
|
color: var(--yellow);
|
|
border-color: var(--yellow);
|
|
background: color-mix(in srgb, var(--yellow) 10%, transparent);
|
|
}
|
|
/* Active Claude model badge on dashboard container rows. */
|
|
.badge-model {
|
|
color: var(--blue);
|
|
border-color: var(--blue);
|
|
opacity: 0.8;
|
|
}
|
|
/* Context-window usage badges on dashboard container rows. */
|
|
.badge-ctx-ok {
|
|
color: var(--green);
|
|
border-color: var(--green);
|
|
opacity: 0.85;
|
|
}
|
|
.badge-ctx-caution {
|
|
color: var(--amber);
|
|
border-color: var(--amber);
|
|
text-shadow: 0 0 6px color-mix(in srgb, var(--amber) 50%, transparent);
|
|
}
|
|
.badge-ctx-warn {
|
|
color: var(--red);
|
|
border-color: var(--red);
|
|
text-shadow: 0 0 6px color-mix(in srgb, var(--red) 50%, transparent);
|
|
}
|
|
.badge-ok {
|
|
background: color-mix(in srgb, var(--green) 12%, transparent);
|
|
color: var(--green);
|
|
border-color: var(--green);
|
|
}
|
|
.badge-fail {
|
|
background: color-mix(in srgb, var(--red) 12%, transparent);
|
|
color: var(--red);
|
|
border-color: var(--red);
|
|
}
|
|
.badge-running {
|
|
background: color-mix(in srgb, var(--amber) 12%, transparent);
|
|
color: var(--amber);
|
|
border-color: var(--amber);
|
|
}
|
|
|
|
/* ─── buttons ───────────────────────────────────────────────────────
|
|
.btn base + semantic colour/size modifiers. */
|
|
.btn {
|
|
font-family: inherit;
|
|
font-weight: bold;
|
|
text-transform: uppercase;
|
|
letter-spacing: 0.1em;
|
|
background: transparent;
|
|
/* Strip browser UA button chrome (solid fill, system text colour).
|
|
Without this, native <button> + <input type="submit"> elements
|
|
ignore our background:transparent and colour in some browsers. */
|
|
-webkit-appearance: none;
|
|
appearance: none;
|
|
border: 1px solid;
|
|
padding: 0.25em 0.8em;
|
|
cursor: pointer;
|
|
text-shadow: 0 0 4px currentColor;
|
|
box-shadow: 0 0 0 0 currentColor;
|
|
transition: box-shadow 0.15s ease;
|
|
}
|
|
.btn:hover {
|
|
background: color-mix(in srgb, var(--fg) 6%, transparent);
|
|
text-shadow: 0 0 10px currentColor;
|
|
box-shadow: 0 0 10px -2px currentColor;
|
|
}
|
|
.btn:disabled,
|
|
.btn[disabled] {
|
|
opacity: 0.32;
|
|
cursor: not-allowed;
|
|
text-shadow: none;
|
|
box-shadow: none;
|
|
}
|
|
.btn:disabled:hover,
|
|
.btn[disabled]:hover {
|
|
background: transparent;
|
|
text-shadow: none;
|
|
box-shadow: none;
|
|
}
|
|
.btn-approve {
|
|
color: var(--green);
|
|
border-color: var(--green);
|
|
}
|
|
.btn-destroy {
|
|
color: var(--red);
|
|
border-color: var(--red);
|
|
font-size: 0.75em;
|
|
padding: 0.15em 0.5em;
|
|
margin-left: 0.6em;
|
|
}
|
|
.btn-rebuild {
|
|
color: var(--amber);
|
|
border-color: var(--amber);
|
|
font-size: 0.75em;
|
|
padding: 0.15em 0.5em;
|
|
margin-left: 0.6em;
|
|
}
|
|
.btn-restart {
|
|
color: var(--cyan);
|
|
border-color: var(--cyan);
|
|
font-size: 0.75em;
|
|
padding: 0.15em 0.5em;
|
|
margin-left: 0.6em;
|
|
}
|
|
.btn-stop {
|
|
color: var(--pink);
|
|
border-color: var(--pink);
|
|
font-size: 0.75em;
|
|
padding: 0.15em 0.5em;
|
|
margin-left: 0.6em;
|
|
}
|
|
.btn-start {
|
|
color: var(--green);
|
|
border-color: var(--green);
|
|
font-size: 0.75em;
|
|
padding: 0.15em 0.5em;
|
|
margin-left: 0.6em;
|
|
}
|
|
/* Same yellow as .badge-paused (the paused-state pill) — pause enters
|
|
that state, so the trigger and the resulting badge read as one
|
|
colour, not two unrelated ones. Resume reads as green like
|
|
.btn-start: both are "go" actions, back to the turn loop running. */
|
|
.btn-pause {
|
|
color: var(--yellow);
|
|
border-color: var(--yellow);
|
|
font-size: 0.75em;
|
|
padding: 0.15em 0.5em;
|
|
margin-left: 0.6em;
|
|
}
|
|
.btn-resume {
|
|
color: var(--green);
|
|
border-color: var(--green);
|
|
font-size: 0.75em;
|
|
padding: 0.15em 0.5em;
|
|
margin-left: 0.6em;
|
|
}
|
|
/* M0V3 affordance (selection bar) — mauve reads as "structural
|
|
change" rather than the destructive red / amber chrome of
|
|
destroy / rebuild. See docs/web-ui/dashboard.md::Selection bar. */
|
|
.btn-move {
|
|
color: var(--purple);
|
|
border-color: var(--purple);
|
|
font-size: 0.75em;
|
|
padding: 0.15em 0.5em;
|
|
margin-left: 0.6em;
|
|
}
|
|
.btn-talk {
|
|
color: var(--cyan);
|
|
border-color: var(--cyan);
|
|
}
|
|
.btn-spawn {
|
|
color: var(--amber);
|
|
border-color: var(--amber);
|
|
}
|
|
|
|
/* ─── page-content gutter ─────────────────────────────────────────────
|
|
Inverted-gutter layout: the dashboard keeps `<body>` full-bleed
|
|
and wraps their padded content in a single `.page-content` div that
|
|
carries the horizontal gutter. Full-width chrome (the tab strip, the
|
|
footer) then spans edge-to-edge for free,
|
|
with no negative-margin breakout hacks. Only matches on pages that opt
|
|
in by adding the wrapper (index.html); ST4TS
|
|
is full-bleed with its own `.<page>-main` padding. */
|
|
.page-content {
|
|
padding: 0 1.5em;
|
|
}
|
|
|
|
/* ─── sticky top region ───────────────────────────────────────────────
|
|
One sticky container per page holding the page chrome (tab bar / page
|
|
header). common.js (initStickyTop) wraps the chrome in this on load. */
|
|
.sticky-top {
|
|
position: sticky;
|
|
top: 0;
|
|
z-index: 50;
|
|
}
|
|
|
|
/* ─── stats table ─────────────────────────────────────────────────
|
|
Shared right-aligned numeric table. Used by /stats.html (busiest
|
|
agents) — moved here from dashboard.css when ST4TS became its own
|
|
page. */
|
|
.hive-stats-table {
|
|
width: 100%;
|
|
border-collapse: collapse;
|
|
font-size: 0.85rem;
|
|
margin-bottom: 8px;
|
|
}
|
|
.hive-stats-table th,
|
|
.hive-stats-table td {
|
|
border-bottom: 1px solid var(--border);
|
|
padding: 5px 8px;
|
|
text-align: right;
|
|
}
|
|
.hive-stats-table th:first-child,
|
|
.hive-stats-table td:first-child {
|
|
text-align: left;
|
|
}
|
|
.hive-stats-table th {
|
|
color: var(--muted);
|
|
font-weight: normal;
|
|
}
|
|
.hive-stats-table td.num {
|
|
font-variant-numeric: tabular-nums;
|
|
}
|