/* Data paths, shared pipeline code and work tools in one readable canvas. */
#infrastructure .infra-panel{padding:30px;background:linear-gradient(130deg,var(--card),var(--input));overflow:hidden}
.data-map-toolbar{display:flex;align-items:center;justify-content:space-between;gap:18px;margin:23px 0 19px}
.data-map-toolbar p{font-size:12px;max-width:720px;line-height:1.6}
.data-map-controls{display:flex;gap:5px;flex-shrink:0}
.data-map-controls button{width:34px;height:34px;border:1px solid var(--border);border-radius:10px;background:var(--input);font-size:18px;transition:border-color .2s,background .2s}
.data-map-controls button:last-child{width:auto;padding-inline:12px;font-size:11px}
.data-map-controls button:hover{background:#9c8dff18;border-color:var(--accent)}
.data-map-controls button:disabled{opacity:.35;cursor:default}
.data-map-viewport{overflow:auto;overscroll-behavior-x:contain;scrollbar-gutter:stable;scrollbar-width:thin;scrollbar-color:var(--accent) var(--input);border:1px solid var(--border);border-radius:22px;background-color:#12151c;background-image:radial-gradient(#9c8dff29 .8px,transparent .8px);background-size:22px 22px;scroll-padding-inline:24px;touch-action:pan-x pan-y;cursor:grab}
.data-map-viewport:focus-visible{outline:3px solid var(--accent);outline-offset:4px}
.data-map-viewport.is-panning{cursor:grabbing;user-select:none}
.data-map-size{position:relative;width:calc(1360px * var(--map-scale,1));height:calc(704px * var(--map-scale,1));overflow:hidden}
.data-map-canvas{position:relative;width:1360px;height:704px;transform:scale(var(--map-scale,1));transform-origin:0 0}
.data-map-lines{position:absolute;inset:0;width:1360px;height:704px;pointer-events:none;overflow:visible}
.map-wire{fill:none;stroke:#b3a7ff;stroke-width:2.5;stroke-linejoin:round;stroke-linecap:round}
.map-signal{fill:none;stroke:#f5f0ff;stroke-width:4;stroke-linecap:round;stroke-dasharray:10 46;stroke-dashoffset:0;animation:map-transfer 1.45s linear infinite;opacity:1}
.map-signal>path{filter:drop-shadow(0 0 5px #b3a7ff)}
.map-control-wire{fill:none;stroke:#9c8dff45;stroke-width:1.5;stroke-dasharray:4 6}
.data-map-canvas.is-map-paused .map-signal{animation-play-state:paused}
.data-map-canvas .map-node{position:absolute;display:flex;flex-direction:column;align-items:stretch;text-align:left;border:1px solid #9c8dff35;border-radius:15px;background:#191d28;padding:17px 14px;color:var(--text);cursor:pointer;isolation:isolate;overflow:hidden;transition:background .22s,border-color .22s,box-shadow .22s}
.map-node::before{position:absolute;content:"";top:0;left:12px;right:12px;height:2px;background:linear-gradient(90deg,var(--accent) 0 35%,#b3a7ff 35% 55%,#777dc1 55% 75%,#ddd5ff 75%);border-radius:5px}
.data-map-canvas .map-node[aria-pressed=true]{background:#252537;border-color:var(--accent);box-shadow:0 0 35px #9c8dff16}
@media(hover:hover) and (pointer:fine){.data-map-canvas .map-node:not([aria-pressed=true]):hover{border-color:var(--accent);box-shadow:0 0 12px #9c8dff20}}
.data-map-canvas .map-node:focus-visible{outline:3px solid var(--accent);outline-offset:5px}
.map-node-heading{display:flex;gap:8px;align-items:center;min-height:28px;margin-bottom:10px}
.map-node-heading img{width:25px;height:25px;object-fit:contain;flex-shrink:0}
.map-node-heading .map-word-logo{width:39px}
.map-node-heading strong{font-size:17px;line-height:1.2;letter-spacing:-.045em;font-weight:600}
.map-node .map-purpose{font-size:12px;color:var(--soft);line-height:1.45;font-weight:500;margin-bottom:9px}
.map-node .map-copy{font-size:11px;line-height:1.65;color:var(--muted)}
.map-node .map-tags{display:flex;flex-wrap:wrap;gap:4px;margin-top:auto;padding-top:10px}
.map-tags span{background:#9c8dff10;border:1px solid #9c8dff15;padding:3px 6px;font-size:9px;line-height:1.2;color:#c8c1ef;border-radius:5px}
.map-source{left:32px;top:260px;width:240px;height:222px}
.map-storage{left:384px;top:260px;width:240px;height:222px}
.map-storage .map-node-heading img{background:var(--text);border-radius:5px;padding:3px}
.map-warehouse{left:736px;top:248px;width:240px;height:246px}
.map-mart{left:1088px;top:260px;width:240px;height:222px}
.data-map-canvas .map-orchestrator,.data-map-canvas .map-python{top:30px;width:626px;height:106px;display:grid;grid-template-columns:150px 1fr;align-items:center;gap:22px;background:#1d1e30;border-radius:15px;padding:18px 24px}
.map-orchestrator{left:32px}.map-python{left:702px}
.map-orchestrator .map-node-heading,.map-python .map-node-heading{margin:0}.map-orchestrator .map-node-heading img,.map-python .map-node-heading img{width:35px;height:35px}.map-orchestrator .map-node-heading strong,.map-python .map-node-heading strong{font-size:24px}
.map-orchestrator .map-purpose,.map-python .map-purpose{display:block;margin-bottom:5px;font-size:13px}.map-orchestrator .map-copy,.map-python .map-copy{display:block;font-size:12px}
.map-warehouse .map-node-heading img{object-fit:cover;object-position:left}
.map-warehouse .map-layers{display:flex;flex-direction:column;gap:4px;margin-top:4px}
.map-layers span{font-size:10px;background:#9c8dff0d;border:1px solid #9c8dff15;color:#c8c3dd;border-radius:4px;padding:4px 5px}
.map-warehouse .map-tags{align-items:center;gap:8px}.map-tags img{width:21px;height:21px;object-fit:contain}.map-warehouse .map-tags span{font-size:10px}
.data-map-canvas .map-kafka,.data-map-canvas .map-spark{top:552px;width:176px;height:116px;padding:14px}
.map-kafka{left:64px}.map-spark{left:416px}.map-kafka .map-node-heading,.map-spark .map-node-heading{margin-bottom:5px}.map-kafka .map-purpose,.map-spark .map-purpose{margin-bottom:0;font-size:11px}
.map-path-label{position:absolute;left:32px;top:216px;font-size:10px;color:var(--soft);letter-spacing:.11em;text-transform:uppercase;font-weight:600;background:#12151c;padding:3px 7px;border-radius:5px}
.map-path-label-stream{left:256px;top:518px;font-size:9px;color:var(--muted);background:transparent;padding:0}
.map-tools-label{position:absolute;left:736px;top:516px;width:592px;color:var(--soft);font-size:10px;line-height:20px;letter-spacing:.08em;text-transform:uppercase;font-weight:600;display:flex;align-items:center;justify-content:space-between;gap:15px}
.map-tools-label span{font-size:9px;letter-spacing:0;color:var(--muted);text-transform:none;font-weight:400}
.data-map-canvas .map-tool{top:552px;width:284px;height:116px;padding:14px 17px;background:#181c25;border-color:var(--border)}
.map-jira{left:736px}.map-git{left:1044px}
.map-tool::before{background:#a6adba44;height:1px}
.map-tool .map-node-heading{margin-bottom:4px}.map-tool .map-purpose{font-size:11px;margin-bottom:2px}.map-tool .map-copy{font-size:10px}
.map-tool-logos{display:flex;align-items:center;gap:5px}.map-tool-logos img:last-child{width:20px;height:20px}
.map-legend{position:absolute;left:32px;top:683px;display:flex;gap:22px;color:var(--muted);font-size:9px;line-height:13px;pointer-events:none}
.map-legend span{display:flex;align-items:center;gap:8px}.map-legend i{width:23px;height:0;border-top:2px solid var(--soft)}.map-legend .map-legend-control{border-top:1.5px dashed #9c8dff75}
.data-map-hint{font-size:10px;margin-top:10px;color:var(--muted)}
#infrastructure .infra-detail{margin-top:25px;margin-bottom:25px;scroll-margin-top:30px}
@keyframes map-transfer{to{stroke-dashoffset:-56}}
@media(max-width:800px){#infrastructure .infra-panel{padding:22px 18px}.data-map-toolbar{align-items:flex-start;flex-direction:column;gap:12px}.data-map-toolbar p{font-size:11px}.data-map-viewport{border-radius:15px}.data-map-controls{align-self:flex-end}.data-map-hint{font-size:10px;line-height:1.6}#infrastructure .infra-detail{padding:23px 20px}#infrastructure .infra-detail h3{font-size:24px}#infrastructure .infra-detail p{font-size:13px}}
@media(prefers-reduced-motion:reduce){.map-signal{display:none;animation:none}.data-map-canvas .map-node{transition:none}}
