App shell as the canvas draws it, full lazy Cache tree, styles aligned with the parent projects

Shell: collapsible rail, DNS/Server groups with pins, always-on header with
breadcrumbs and server status, Ctrl/Cmd+K command palette.
Cache: left column is a lazily expanded tree of every zone, right column the
selected node's records; both columns are ReUI Frames.
Styles: dark variant follows data-theme (field and outline fills), 32 px selects,
36 px segmented strip, 40 px caption table heads, 56 px rows, 20/24/32 page padding.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
This commit is contained in:
DenozordecandClaude Sonnet 5.5 committed 2026-10-27 09:35:41 +07:00
1 parent 44b6dc246c
commit f4513533c4
22 files changed
+509 -534

No files matched your search

+6 -5
View File
@@ -19,12 +19,13 @@ Administration, with the same values copied by hand.
.table th {
text-align: left;
font-size: var(--text-size);
font-weight: var(--text-weight);
letter-spacing: var(--text-tracking);
text-transform: uppercase;
/* The DataGrid head the other tables wear: a caption, not small caps. */
font-size: var(--t-1);
font-weight: 500;
color: var(--mute);
padding: 0 var(--s-5) var(--s-4) 0;
height: var(--row-header);
padding: 0 var(--s-5) 0 var(--s-5);
background: color-mix(in oklab, var(--pan2) 30%, transparent);
border-bottom: 1px solid var(--line);
}
+1 -1
View File
@@ -29,7 +29,7 @@ magazine kicker, which is decoration, and this is navigation.
margin: 0;
font-size: var(--t-7);
font-weight: 600;
letter-spacing: -0.025em;
letter-spacing: -0.01em;
color: var(--ink);
word-break: break-word;
}
+2 -2
View File
@@ -30,7 +30,7 @@ export function Segmented<T extends string>({
}) {
return (
<div
className="inline-flex max-w-full min-w-0 gap-0.5 overflow-x-auto rounded-lg bg-muted p-0.5 [scrollbar-width:none]"
className="inline-flex max-w-full min-w-0 gap-0.5 overflow-x-auto rounded-lg bg-muted p-[3px] [scrollbar-width:none]"
role={asTabs ? 'tablist' : 'group'}
aria-label={label}
>
@@ -41,7 +41,7 @@ export function Segmented<T extends string>({
className={cn(
'flex-none rounded-md border-0 bg-transparent px-3 text-sm font-medium whitespace-nowrap text-muted-foreground transition-colors outline-none hover:text-foreground focus-visible:ring-3 focus-visible:ring-ring/50',
'aria-pressed:bg-card aria-pressed:text-foreground aria-pressed:shadow-xs aria-selected:bg-card aria-selected:text-foreground aria-selected:shadow-xs',
compact ? 'h-6 text-xs' : 'h-7',
compact ? 'h-6 text-xs' : 'h-[30px]',
)}
role={asTabs ? 'tab' : undefined}
aria-selected={asTabs ? o.id === active : undefined}
+1 -1
View File
@@ -10,7 +10,7 @@ to weigh the same. What changes is that this one opens.
gap: var(--s-6);
width: 100%;
min-height: var(--field-height);
padding: var(--s-5) var(--s-7);
padding: calc((var(--field-height) - var(--field-line) - 2px) / 2) var(--s-7);
border: 1px solid var(--line-field);
border-radius: var(--r-3);
background-color: var(--field);
+3 -2
View File
@@ -61,7 +61,7 @@ the tint.
/* The last row carries no line: the panel border closes it. */
.table tbody tr:last-child td { border-bottom: 0; }
.table tbody tr { transition: background var(--t-fast); }
.table tbody tr { transition: background var(--t-fast); height: 56px; }
.table tbody tr:hover { background: var(--hover); }
/*
@@ -383,6 +383,7 @@ line and count twice.
*/
.stack[data-stacked] > tbody > tr,
.stack[data-stacked] > tfoot > tr {
height: auto;
display: flex;
flex-wrap: wrap;
align-items: flex-start;
@@ -452,7 +453,7 @@ empty alternative text keeps a screen reader from reading it twice.
font-size: var(--text-size);
font-weight: var(--text-weight);
letter-spacing: var(--text-tracking);
text-transform: uppercase;
color: var(--mute);
white-space: nowrap;
}
+1 -1
View File
@@ -18,6 +18,6 @@ It is applied with `composes:`, not by copying it.
font-size: var(--text-size);
font-weight: var(--text-weight);
letter-spacing: var(--text-tracking);
text-transform: uppercase;
color: var(--mute);
}