/* diagram svgs (src/assets/diagrams) carry only shapes and class names;
colors and type come from here so they follow the theme */
.diagram {
margin-block: 1.5rem;
/* one hue per role, as in the Git Merge 2026 slides */
--d-pds: #0ea5e9;
--d-relay: #eab308;
--d-index: #22c55e;
--d-client: #a855f7;
--d-knot: #f59e0b;
--d-spindle: #ec4899;
}
.diagram svg {
display: block;
width: 100%;
height: auto;
max-width: 48rem;
margin-inline: auto;
font-family: var(--font-sans);
}
.diagram figcaption {
margin-top: 0.5rem;
text-align: center;
font-size: var(--sl-text-body-sm);
color: var(--color-foreground-muted);
}
/* a service or component */
.diagram .box {
fill: var(--color-background-default);
stroke: var(--color-border-strong);
stroke-width: 1;
}
/* the thing the diagram is about */
.diagram .box-accent {
fill: var(--color-background-info-subtle);
stroke: var(--color-foreground-info);
stroke-width: 1;
}
/* something outside tangled: a pds, plc, the user's machine */
.diagram .box-external {
fill: var(--color-background-inset);
stroke: var(--color-border-default);
stroke-width: 1;
stroke-dasharray: 4 3;
}
/* a dashed region grouping boxes, e.g. one operator's machines */
.diagram .group {
fill: none;
stroke: var(--color-border-default);
stroke-width: 1;
stroke-dasharray: 6 4;
}
/* role boxes: tinted fill, full-strength stroke */
.diagram :is(.box-pds, .box-relay, .box-index, .box-client, .box-knot, .box-spindle) {
stroke-width: 1.5;
fill: color-mix(in oklab, var(--d-role) 16%, var(--color-background-default));
stroke: var(--d-role);
}
.diagram .box-pds { --d-role: var(--d-pds); }
.diagram .box-relay { --d-role: var(--d-relay); }
.diagram .box-index { --d-role: var(--d-index); }
.diagram .box-client { --d-role: var(--d-client); }
.diagram .box-knot { --d-role: var(--d-knot); }
.diagram .box-spindle { --d-role: var(--d-spindle); }
/* something you could run instead: dashed, untinted */
.diagram .yours {
fill: var(--color-background-default);
stroke-dasharray: 5 4;
}
.diagram .box.yours {
stroke: var(--color-border-strong);
}
/* a small tag naming a supporting service */
.diagram .chip {
fill: var(--color-background-muted);
stroke: none;
}
.diagram .chip-label {
fill: var(--color-foreground-muted);
font-size: 10.5px;
}
.diagram .divider {
stroke: var(--color-border-default);
stroke-width: 1;
}
.diagram .label {
fill: var(--color-foreground-default);
font-size: 13px;
font-weight: 590;
}
.diagram .sublabel {
fill: var(--color-foreground-muted);
font-size: 11px;
}
.diagram .group-label,
.diagram .edge-label {
fill: var(--color-foreground-subtle);
font-size: 11px;
}
.diagram .edge {
fill: none;
stroke: var(--color-foreground-subtle);
stroke-width: 1.25;
}
.diagram .edge-dashed {
fill: none;
stroke: var(--color-foreground-subtle);
stroke-width: 1.25;
stroke-dasharray: 4 3;
}
.diagram .arrowhead {
fill: var(--color-foreground-subtle);
}