feat(foundry): close the operational map data loop

This commit is contained in:
Codex
2026-07-20 20:45:05 +03:00
parent aac44d057f
commit a02c3ff3dd
44 changed files with 4158 additions and 811 deletions
+186 -137
View File
@@ -603,126 +603,6 @@ textarea {
display: none;
}
.catalog-map-fixture__grid {
position: absolute;
inset: 0;
opacity: 0.32;
background-image:
radial-gradient(circle, color-mix(in srgb, var(--catalog-accent) 54%, transparent) 1px, transparent 1.4px),
linear-gradient(color-mix(in srgb, var(--nodedc-text-muted) 18%, transparent) 1px, transparent 1px),
linear-gradient(90deg, color-mix(in srgb, var(--nodedc-text-muted) 18%, transparent) 1px, transparent 1px);
background-position: 0 0, center, center;
background-size: 1.25rem 1.25rem, 5rem 5rem, 5rem 5rem;
}
.catalog-map-fixture__geometry {
position: absolute;
inset: 0;
width: 100%;
height: 100%;
overflow: visible;
}
.catalog-map-fixture__zone {
fill: color-mix(in srgb, var(--catalog-accent) 18%, transparent);
stroke: color-mix(in srgb, var(--catalog-accent) 70%, transparent);
stroke-width: 0.45;
vector-effect: non-scaling-stroke;
}
.catalog-map-fixture__track,
.catalog-map-fixture__route,
.catalog-map-fixture__trace {
fill: none;
stroke-linecap: round;
stroke-linejoin: round;
vector-effect: non-scaling-stroke;
}
.catalog-map-fixture__track { stroke: color-mix(in srgb, #8f72dc 74%, var(--nodedc-text-primary)); stroke-width: 2; }
.catalog-map-fixture__route { stroke: var(--catalog-accent); stroke-width: 4; }
.catalog-map-fixture__trace { stroke: color-mix(in srgb, var(--catalog-accent) 58%, transparent); stroke-width: 2; stroke-dasharray: 5 5; }
.catalog-map-fixture__place {
position: absolute;
z-index: 1;
translate: -50% -50%;
color: color-mix(in srgb, var(--nodedc-text-primary) 72%, transparent);
font-size: clamp(1.2rem, 2.4vw, 2.35rem);
font-weight: 700;
letter-spacing: 0.16em;
pointer-events: none;
}
.catalog-map-fixture__entity {
position: absolute;
z-index: 4;
display: flex;
align-items: center;
gap: 0.4rem;
min-width: 0;
border: 0;
background: transparent;
color: var(--nodedc-text-primary);
translate: -1.35rem -50%;
cursor: pointer;
}
.catalog-map-fixture__pin {
display: grid;
width: 2.35rem;
height: 2.35rem;
flex: 0 0 auto;
place-items: center;
border: 0.2rem solid color-mix(in srgb, var(--nodedc-text-primary) 84%, transparent);
border-radius: 50%;
background: var(--catalog-accent);
color: var(--nodedc-text-on-accent);
box-shadow: 0 0 0 0.45rem color-mix(in srgb, var(--catalog-accent) 18%, transparent);
}
.catalog-map-fixture__entity[data-kind="station"] .catalog-map-fixture__pin {
background: color-mix(in srgb, #8f72dc 82%, var(--nodedc-panel-item-bg));
}
.catalog-map-fixture__entity[data-active] .catalog-map-fixture__pin {
box-shadow: 0 0 0 0.7rem color-mix(in srgb, var(--catalog-accent) 26%, transparent), 0 0 1.6rem color-mix(in srgb, var(--catalog-accent) 58%, transparent);
}
.catalog-map-fixture__label {
max-width: 12rem;
overflow: hidden;
border-radius: var(--nodedc-radius-circle);
background: var(--nodedc-panel-item-bg);
padding: 0.5rem 0.72rem;
box-shadow: var(--nodedc-glass-control-shadow);
font-size: var(--nodedc-font-size-xs);
font-weight: 700;
text-overflow: ellipsis;
white-space: nowrap;
}
.catalog-map-fixture__status {
position: absolute;
z-index: 5;
top: 1rem;
left: 1rem;
display: flex;
align-items: center;
gap: 0.6rem;
border-radius: var(--nodedc-radius-circle);
background: var(--nodedc-panel-item-bg);
padding: 0.5rem 0.8rem;
color: var(--nodedc-text-muted);
font-size: var(--nodedc-font-size-xs);
}
.catalog-map-fixture__status span {
color: var(--nodedc-status-success);
font-weight: 800;
text-transform: uppercase;
}
.catalog-map-fixture__actions {
position: absolute;
z-index: 8;
@@ -734,15 +614,16 @@ textarea {
.catalog-map-fixture__actions .nodedc-icon-button,
.catalog-map-fixture__toolbar .nodedc-icon-button {
border: 1px solid var(--nodedc-glass-outline);
background: color-mix(in srgb, var(--nodedc-glass-control-bg) 76%, transparent);
border: 0;
background: var(--nodedc-map-glass-bg);
color: var(--nodedc-map-glass-text);
box-shadow: var(--nodedc-glass-control-shadow);
backdrop-filter: blur(var(--nodedc-blur-control));
}
.catalog-map-fixture__actions .nodedc-icon-button:hover,
.catalog-map-fixture__toolbar .nodedc-icon-button:hover {
background: var(--nodedc-glass-control-hover);
background: var(--nodedc-map-glass-hover);
}
.catalog-map-fixture__actions .nodedc-icon-button[data-active],
@@ -753,21 +634,46 @@ textarea {
}
.catalog-map-fixture__layers {
position: absolute;
z-index: 8;
top: 4.8rem;
right: 1rem;
display: grid;
width: min(20rem, calc(100% - 2rem));
gap: 0.55rem;
box-shadow: var(--nodedc-glass-dropdown-shadow);
--nodedc-radius-modal: 1.45rem;
}
.catalog-map-fixture__layers-head {
display: flex;
align-items: center;
justify-content: space-between;
gap: 0.75rem;
.catalog-map-fixture__map-glass-window,
.catalog-map-fixture__map-settings-window {
--nodedc-canvas: #111216;
--nodedc-text-primary: rgba(13, 14, 17, 0.96);
--nodedc-text-secondary: rgba(13, 14, 17, 0.72);
--nodedc-text-muted: rgba(13, 14, 17, 0.54);
--nodedc-field-bg: rgba(255, 255, 255, 0.88);
--nodedc-glass-control-bg: rgba(255, 255, 255, 0.78);
--nodedc-glass-control-hover: rgba(255, 255, 255, 0.92);
--nodedc-glass-control-active: rgba(255, 255, 255, 0.96);
--nodedc-glass-control-active-text: rgba(8, 8, 10, 0.96);
background: var(--nodedc-map-glass-bg);
color: var(--nodedc-text-primary);
box-shadow: var(--nodedc-glass-dropdown-shadow);
backdrop-filter: blur(var(--nodedc-blur-modal)) saturate(128%);
-webkit-backdrop-filter: blur(var(--nodedc-blur-modal)) saturate(128%);
}
.catalog-map-fixture__map-glass-window .nodedc-workspace-window__action,
.catalog-map-fixture__map-settings-window .nodedc-window__close {
background: rgba(255, 255, 255, 0.24);
color: rgba(255, 255, 255, 0.94);
}
.catalog-map-fixture__map-glass-window .nodedc-workspace-window__action:hover,
.catalog-map-fixture__map-settings-window .nodedc-window__close:hover {
background: rgba(255, 255, 255, 0.42);
color: #ffffff;
}
.catalog-map-fixture__layers-content {
display: grid;
gap: 0.55rem;
}
.catalog-map-fixture__layers .nodedc-workspace-window__body {
padding-top: 0.35rem;
}
.catalog-map-fixture__layers .nodedc-checker {
@@ -799,13 +705,140 @@ textarea {
display: flex;
gap: 0.35rem;
border-radius: var(--nodedc-radius-circle);
background: color-mix(in srgb, var(--nodedc-glass-control-bg) 76%, transparent);
background: var(--nodedc-map-glass-bg);
padding: 0.4rem;
translate: -50% 0;
backdrop-filter: blur(var(--nodedc-blur-control));
box-shadow: var(--nodedc-glass-dropdown-shadow);
}
.catalog-map-fixture__objects-menu {
display: grid;
max-height: min(60vh, 28rem);
overflow: auto;
border-radius: 1rem;
padding: 0.48rem;
}
.catalog-map-fixture__objects-menu-list,
.catalog-map-fixture__objects-menu-head,
.catalog-map-fixture__objects-menu-item {
display: grid;
}
.catalog-map-fixture__objects-menu-list {
gap: 0.24rem;
}
.catalog-map-fixture__objects-menu-head {
gap: 0.12rem;
padding: 0.48rem 0.58rem 0.55rem;
}
.catalog-map-fixture__objects-menu-head small,
.catalog-map-fixture__objects-menu-item small,
.catalog-map-fixture__objects-menu-empty {
color: var(--nodedc-map-glass-text-muted);
font-size: var(--nodedc-font-size-xs);
}
.catalog-map-fixture__objects-menu-item {
width: 100%;
min-width: 0;
gap: 0.16rem;
border: 0;
border-radius: 0.78rem;
background: transparent;
padding: 0.64rem 0.7rem;
color: var(--nodedc-map-glass-text);
font: inherit;
text-align: left;
cursor: pointer;
}
.catalog-map-fixture__objects-menu-item:hover,
.catalog-map-fixture__objects-menu-item:focus-visible,
.catalog-map-fixture__objects-menu-item[data-open] {
background: rgb(255 255 255 / 0.16);
}
.catalog-map-fixture__objects-menu-item > span {
overflow: hidden;
font-size: var(--nodedc-font-size-sm);
font-weight: 760;
text-overflow: ellipsis;
white-space: nowrap;
}
.catalog-map-fixture__objects-menu-empty {
padding: 0.72rem;
}
.catalog-map-fixture__subject-window {
--nodedc-radius-modal: 1.45rem;
}
.catalog-map-fixture__subject-window .nodedc-workspace-window__body {
padding: 0.42rem 0.65rem 0.68rem;
}
.catalog-map-fixture__target-filters,
.catalog-map-fixture__target-filters section {
display: grid;
gap: 0.38rem;
}
.catalog-map-fixture__target-filter-list {
display: grid;
grid-template-columns: minmax(0, 1fr);
gap: 0.36rem;
}
.catalog-map-fixture__target-filter-list button {
display: inline-flex;
width: 100%;
min-height: 2.05rem;
align-items: center;
justify-content: space-between;
gap: 0.75rem;
border: 0;
border-radius: var(--nodedc-radius-circle);
background: rgba(255, 255, 255, 0.72);
padding: 0.42rem 0.72rem;
color: rgba(8, 8, 10, 0.88);
font: inherit;
font-size: 0.72rem;
font-weight: 700;
line-height: 1;
white-space: nowrap;
cursor: pointer;
}
.catalog-map-fixture__target-filter-list button > span {
margin-left: auto;
color: rgba(8, 8, 10, 0.96);
font-weight: 800;
text-align: right;
}
.catalog-map-fixture__target-filter-list button:hover,
.catalog-map-fixture__target-filter-list button[data-active] {
background: rgba(255, 255, 255, 0.96);
color: rgba(8, 8, 10, 0.96);
}
.catalog-map-fixture__target-filter-list button:disabled {
cursor: default;
opacity: 0.55;
}
.catalog-map-inspector__style {
display: grid;
gap: 0.5rem;
border-top: 1px solid color-mix(in srgb, var(--nodedc-glass-outline) 44%, transparent);
padding-top: 0.65rem;
}
.catalog-map-inspector__note {
color: var(--nodedc-text-muted);
font-size: var(--nodedc-font-size-xs);
@@ -1192,6 +1225,22 @@ textarea {
gap: 1.25rem;
}
.catalog-status-library {
display: grid;
gap: 1rem;
}
.catalog-toast-library-grid {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 0.7rem;
}
.catalog-toast-library-grid .nodedc-toast {
width: auto;
min-width: 0;
}
.catalog-modal-group {
display: grid;
gap: 0.65rem;