/* Оформление UML-диаграмм.
 *
 * ⚠️ ЦВЕТ — ВТОРОЙ ПРИЗНАК, А НЕ ЕДИНСТВЕННЫЙ. Всё, что различается по
 * смыслу, различается ещё и формой или подписью: ручной шаг штрихуется,
 * хранилище рисуется цилиндром, внешняя система несёт стереотип. Диаграмма
 * обязана читаться в тёмной теме и на чёрно-белой печати — по ГОСТ 7.32
 * иллюстрация должна быть понятна без цвета.
 */

.uml { display: block; max-width: none; }

/* Формы */
.uml .u-node.shape { fill: var(--surface); stroke: var(--hairline-strong); stroke-width: 1.25; }
.uml .u-node.ext.shape { fill: var(--surface-2); stroke: var(--ink-3); stroke-dasharray: 5 3; }
.uml .u-node.store.shape { fill: var(--surface-2); stroke: var(--ink-3); }
.uml .u-node.accent.shape { fill: var(--accent-soft); stroke: var(--accent); }
.uml .u-node.artifact.shape { fill: var(--surface); stroke: var(--hairline); }
.uml .u-node.node3d { stroke: var(--ink-3); fill: var(--surface); }
.uml .u-node.uc { fill: var(--surface); stroke: var(--hairline-strong); }
.uml .u-node-lip { fill: none; stroke: var(--ink-3); stroke-width: 1.1; }
.uml .u-3d { fill: var(--surface-3); stroke: var(--ink-3); stroke-width: 1.1; }
.uml .u-ico { fill: var(--surface-3); stroke: var(--ink-3); stroke-width: .9; }

/* Ручной шаг: штриховка + рамка. Смысл держится на узоре, не на цвете. */
.uml .u-node.manual.shape { fill: url(#u-manual); stroke: var(--warn); stroke-width: 1.5; }
.uml .u-hatch-bg { fill: var(--warn-soft); }
.uml .u-hatch-line { stroke: var(--warn); stroke-width: 1.6; opacity: .5; }

/* Дорожки и рамки */
.uml .u-lane { fill: var(--surface-2); stroke: var(--hairline); stroke-dasharray: 3 3; }
.uml .u-swim { fill: var(--surface-2); stroke: var(--hairline); }
.uml .u-swim.manual { fill: var(--warn-soft); }
.uml .u-sysbox { fill: var(--surface-2); stroke: var(--hairline-strong); }
.uml .u-frame { fill: none; stroke: var(--hairline-strong); }
.uml .u-frame-tag { fill: var(--surface-3); stroke: var(--hairline-strong); }

/* Линии */
.uml .u-edge { stroke: var(--ink-2); stroke-width: 1.4; }
.uml .u-edge.dash { stroke-dasharray: 6 4; }
.uml .u-mk-open { fill: none; stroke: var(--ink-2); stroke-width: 1.4; }
.uml .u-mk-solid { fill: var(--ink-2); stroke: none; }
.uml .u-life { stroke: var(--ink-3); stroke-width: 1.1; stroke-dasharray: 4 4; }
.uml .u-exec { fill: var(--surface-3); stroke: var(--ink-3); stroke-width: 1; }
.uml .u-div { stroke: var(--hairline-strong); stroke-width: 1; }
.uml .u-bar { fill: var(--ink); }
.uml .u-actor { fill: none; stroke: var(--ink); stroke-width: 1.6; }
.uml .u-init { fill: var(--ink); }
.uml .u-final-o { fill: none; stroke: var(--ink); stroke-width: 1.6; }
.uml .u-note { fill: var(--warn-soft); stroke: var(--warn); stroke-width: 1; }

/* Текст */
.uml .u-t { fill: var(--ink); font-family: var(--font); }
.uml .u-sub, .uml .u-stereo { fill: var(--ink-2); }
.uml .u-stereo { font-style: italic; }
.uml .u-lane-t { fill: var(--ink-2); }
.uml .u-frame-t { fill: var(--ink); }
.uml .u-msg { fill: var(--ink); }
.uml .u-attr { fill: var(--ink-2); font-family: var(--font-mono); }
.uml .u-lbl { fill: var(--ink-2); }
.uml .u-lbl-bg { fill: var(--surface); opacity: .92; }
