.floor-infra { padding: 25px; } .toolbar { display: flex; gap: 10px; margin-bottom: 15px; } .filter-form { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin-bottom: 18px; } .filter-form select { padding: 8px 10px; border-radius: 4px; border: 1px solid #ccc; } .infra-plan { padding: 15px; margin-bottom: 28px; background: #f7f7f7; border: 1px dashed #ccc; border-radius: 6px; } .infra-plan-header { display: flex; align-items: center; justify-content: space-between; gap: 10px; } .infra-plan-header h2 { margin: 0; } .infra-plan-tools { display: flex; gap: 6px; } .infra-floor-canvas { position: relative; margin-top: 12px; width: 100%; min-height: 560px; border: 1px solid #d4d4d4; border-radius: 8px; background: #fff; overflow: hidden; touch-action: none; cursor: grab; } .infra-floor-canvas.is-dragging { cursor: grabbing; } .infra-floor-scene { position: absolute; left: 0; top: 0; transform-origin: 0 0; will-change: transform; } .infra-floor-svg { position: absolute; left: 0; top: 0; object-fit: fill; pointer-events: none; opacity: 0.22; } .infra-floor-overlay { position: absolute; left: 0; top: 0; z-index: 2; } .infra-overlay-marker { pointer-events: auto; } .infra-room-shape { fill: rgba(60, 102, 164, 0.06); stroke: rgba(60, 102, 164, 0.55); stroke-width: 1.4; } .infra-room-label { fill: rgba(34, 59, 95, 0.9); font-size: 18px; font-weight: 700; text-anchor: middle; dominant-baseline: middle; pointer-events: none; } .infra-connection-path { fill: none; stroke: rgba(212, 97, 54, 0.8); stroke-linecap: round; stroke-linejoin: round; stroke-dasharray: 6 5; } .infra-node { cursor: move; } .infra-node-label { font-size: 13px; fill: #223a61; font-weight: 600; pointer-events: none; } .infra-node--patchpanel .infra-node-shape { fill: rgba(13, 110, 253, 0.25); stroke: #0d6efd; stroke-width: 2; } .infra-node--outlet .infra-node-shape { fill: rgba(25, 135, 84, 0.25); stroke: #198754; stroke-width: 2; } .infra-section { margin-bottom: 30px; } .infra-table { width: 100%; border-collapse: collapse; margin-top: 10px; } .infra-table th, .infra-table td { padding: 10px; border-bottom: 1px solid #ddd; } .floor-plan-hint { margin: 8px 0 0; font-size: 0.85em; color: #444; } .empty-state { padding: 20px; background: #fafafa; border: 1px dashed #ccc; border-radius: 6px; } .actions .button-small { margin-right: 6px; }