/* Craft 3.4: compact resource slots, traffic inventory, redstone signal history. */
.node-card .card-tags{margin:8px 0;min-height:0}.node-card .card-heading{padding-bottom:10px}.resource-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px 14px;min-width:0}.resource-grid>div{min-width:0}.resource-grid .meter{margin:0}.resource-grid .meter-label{font-size:14px;margin-bottom:5px}.resource-grid .meter-label strong{font-weight:700}.resource-grid .metric-foot{display:block;color:var(--muted);font-size:14px;margin-top:4px;white-space:nowrap}.node-card .card-network{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin-top:13px;padding:9px 10px;border:2px solid var(--line);box-shadow:inset 2px 2px #32452222,inset -2px -2px #ffffdf40;background:var(--slot,var(--surface2))}.card-network>div{display:grid;grid-template-columns:auto 1fr;gap:2px 6px;font-size:14px;min-width:0}.card-network>div>strong{text-align:right;font-weight:600;font-size:14px}.card-network>div>small{grid-column:1/-1;font-size:14px}.node-facts{display:flex;justify-content:space-between;gap:6px;font-size:14px;color:var(--muted);margin:6px 0 10px}.node-facts b{font-weight:500;color:var(--ink)}.traffic-title{display:flex;justify-content:space-between;gap:6px;font-size:14px}.traffic-title>span:last-child{color:var(--accent)}.traffic-inventory .meter{margin:5px 0 2px}.traffic-note{display:block;font-size:14px;color:var(--muted);margin-top:3px}.traffic-inventory .meter-label{font-size:14px}.warn-text,.traffic-title>.warn-text{color:var(--danger)}.node-card .card-bottom{margin-top:8px}.route-panel{margin-top:10px;min-width:0}.route-badges{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:5px}.route-badge{display:flex;flex-direction:column;align-items:flex-start;gap:2px;padding:5px 6px;background:var(--surface2);border:1px solid var(--line);box-shadow:inset 1px 1px #ffffcf55,inset -1px -1px #29401e44;color:var(--ink);font:inherit;cursor:pointer;min-width:0}.route-badge>span{color:var(--muted);font-size:14px}.route-badge>b{font-size:14px;max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.route-badge.premium{border-top:2px solid #849c48}.route-badge:hover{background:var(--accent-soft);transform:translateY(-1px)}.route-caption,.route-wait{font-size:14px;color:var(--muted);margin-top:4px}.latency-heading{display:flex;justify-content:space-between;gap:8px;font-size:14px;margin-bottom:8px}.latency-row{display:block;width:100%;padding:3px 0;border:0;background:none;color:var(--ink);text-align:left;font:inherit;cursor:pointer}.latency-row:hover{background:var(--surface2)}.ping-summary{display:grid!important;grid-template-columns:minmax(0,1fr) auto 52px;gap:8px;font-size:14px;align-items:center}.ping-summary>.ping-loss{text-align:right;font-variant-numeric:tabular-nums}.ping-summary>strong{font-weight:700}.ping-history{display:grid!important;grid-template-columns:repeat(30,minmax(0,1fr));gap:3px;margin-top:5px;overflow:visible!important}.ping-block{height:7px;min-width:0;box-shadow:inset 0 2px #ffffff35,inset -1px -1px #122b2433}.ping-block.ping-state-green,.ping-legend>.green{background:#408258}.ping-block.ping-state-yellow,.ping-legend>.yellow{background:#d39a32}.ping-block.ping-state-red,.ping-legend>.red{background:#b94e43}.ping-block.ping-state-empty,.ping-legend>.ping-no-sample{background:#87948144;box-shadow:inset 0 0 0 1px #77806d44}.latency-row .ping-green,.ping-green{color:#35724d}.latency-row .ping-yellow,.ping-yellow{color:#956311}.latency-row .ping-red,.ping-red{color:#ab3b32}.latency-row.stale strong{color:var(--muted)}.latency-panel{margin-top:10px}.latency-rows{gap:7px}.latency-note{font-size:14px;margin-top:7px}.ping-stat-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.ping-stat-grid>span{background:var(--surface2);border:2px solid var(--line);padding:8px;font-size:14px;color:var(--muted)}.ping-stat-grid b{display:block;color:var(--ink);font-size:14px}.ping-legend{display:flex;flex-wrap:wrap;align-items:center;gap:6px;font-size:14px}.ping-legend>i{display:inline-block;width:8px;height:8px}.ping-records{max-height:330px;overflow:auto;border:2px solid var(--line)}.ping-records table{width:100%;border-collapse:collapse;font-size:14px}.ping-records th{position:sticky;top:0;background:var(--surface2)}.ping-records th,.ping-records td{padding:7px;text-align:left;border-bottom:1px solid var(--line)}#ping-dialog h2,#route-dialog h2{font-size:16px;overflow-wrap:anywhere}.route-records{display:grid;gap:6px;max-height:440px;overflow:auto}.route-record{padding:8px;background:var(--surface2);border:1px solid var(--line)}.route-record>div{display:flex;justify-content:space-between;gap:8px;font-size:14px}.route-record>small{font-size:14px;color:var(--muted);overflow-wrap:anywhere;display:block;margin-top:3px}.node-grid.list .node-card{grid-template-columns:1.2fr 1fr 1.2fr}.node-grid.list .route-panel{grid-column:1;grid-row:2}.node-grid.list .card-tags{grid-column:1;grid-row:3}.node-grid.list .node-facts,.node-grid.list .traffic-inventory{grid-column:3}.node-grid.list .card-bottom{grid-column:3;grid-row:auto}.node-grid.list .meters{grid-row:1/5}.node-grid.list .latency-panel{grid-column:1/-1}[data-appearance=dark] .ping-green{color:#7dcc91}[data-appearance=dark] .ping-yellow{color:#efbc60}[data-appearance=dark] .ping-red{color:#ee9182}@media(max-width:700px){.resource-grid .metric-foot{font-size:14px}.node-grid.list .node-card{display:block}.node-grid.list .resource-grid{display:grid}.node-card .card-network{gap:8px;padding:8px}.ping-summary{font-size:14px}.ping-history{gap:2px}.node-card .card-tags{margin:8px 0}.route-badge>b{font-size:14px}}@media(prefers-reduced-motion:reduce){.route-badge:hover{transform:none}}

/* Isolated placeholders: never reuse the global .empty page state. */
.ping-history{height:7px;min-height:7px;max-height:7px;width:100%}.ping-history .ping-block{display:block;height:7px;min-height:0;max-height:7px;padding:0;margin:0;border:0;width:auto;min-width:0}.loss-track-row{display:grid!important;grid-template-columns:24px minmax(0,1fr) 44px;align-items:center;gap:6px;margin-top:6px;font-size:14px;color:var(--muted)}.loss-track-row small{text-align:right;font-size:14px}.loss-track{position:relative;display:block;height:7px;border:1px solid var(--line);background:repeating-linear-gradient(90deg,#87948133 0,#87948133 6px,transparent 6px,transparent 8px);overflow:hidden}.loss-fill{display:block;height:100%;min-width:0;background:repeating-linear-gradient(90deg,var(--loss-color) 0,var(--loss-color) 6px,transparent 6px,transparent 8px)}.loss-fill.red{--loss-color:#b94e43}.loss-fill.yellow{--loss-color:#d39a32}.loss-fill.green{--loss-color:#408258}.loss-zero{position:absolute;left:0;top:0;width:2px;height:100%;background:#408258}.route-item-icon{width:18px;height:18px;flex:none;image-rendering:pixelated;vertical-align:middle}.route-badge .route-item-label{display:flex;align-items:center;gap:4px;min-width:0;max-width:100%;font-size:14px}.route-item-label>span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.route-record b{display:flex;align-items:center;gap:5px}
/* Compact list rows: explicit areas prevent auto-placement from stretching slots. */
@media(min-width:701px){
.node-grid.list .node-card{display:grid;grid-template-columns:minmax(190px,1fr) minmax(175px,1fr) minmax(190px,1fr) minmax(220px,1.25fr);grid-template-areas:"identity resources network latency" "routes resources facts latency" "tags bottom traffic latency";gap:6px 16px;align-items:start;padding:14px 16px}
.node-grid.list .card-heading{grid-area:identity;margin:0;padding:0 0 6px;min-width:0}
.node-grid.list .route-panel{grid-area:routes;margin:0;min-width:0}
.node-grid.list .card-tags{grid-area:tags;margin:0;min-height:0}
.node-grid.list .meters{grid-area:resources;align-content:start;gap:12px 10px;min-width:0}
.node-grid.list .card-network{grid-area:network;margin:0;min-width:0;gap:6px;padding:6px}
.node-grid.list .node-facts{grid-area:facts;margin:0;min-width:0;flex-wrap:wrap}
.node-grid.list .traffic-inventory{grid-area:traffic;min-width:0}
.node-grid.list .card-bottom{grid-area:bottom;margin:0;min-width:0;flex-wrap:wrap;gap:3px}
.node-grid.list .latency-panel{grid-area:latency;margin:0;padding:0 0 0 12px;border-top:0;border-left:1px dashed var(--line);min-width:0;align-self:stretch}
.node-grid.list .latency-rows{grid-template-columns:minmax(0,1fr);gap:4px}
.node-grid.list .latency-heading{margin-bottom:4px;font-size:14px}
.node-grid.list .latency-note{font-size:14px;margin-top:4px}
.node-grid.list .ping-summary{font-size:14px;gap:4px;grid-template-columns:minmax(0,1fr) auto 40px}
.node-grid.list .ping-history{gap:2px;margin-top:3px}
.node-grid.list .loss-track-row{margin-top:3px}
.node-grid.list .node-emblem{width:36px;height:34px}.node-grid.list .pixel-flag{max-width:30px;max-height:24px}
.node-grid.list .node-identity{gap:6px}.node-grid.list .node-meta{font-size:14px}.node-grid.list .node-name{font-size:14px}
.node-grid.list .node-header-actions{gap:4px}.node-grid.list .node-header-actions .unlock-bag{width:26px;height:28px}.node-grid.list .node-header-actions .unlock-bag svg{width:19px;height:22px}
.node-grid.list .route-badge{padding:3px}.node-grid.list .route-item-icon{width:14px;height:14px}.node-grid.list .route-item-label{gap:2px;font-size:14px}
.node-grid.list .route-caption,.node-grid.list .traffic-note{font-size:14px}
.node-grid.list .card-network>div{display:block;font-size:14px}.node-grid.list .card-network>div>strong{display:block;text-align:left;white-space:nowrap;font-size:14px}.node-grid.list .card-network>div>small{display:block;font-size:14px;white-space:nowrap}
.node-grid.list .resource-grid .metric-foot{font-size:14px;white-space:normal}.node-grid.list .resource-grid .meter-label{font-size:14px}
.node-grid.list .traffic-title{font-size:14px;flex-wrap:wrap}
}
@media(min-width:701px) and (max-width:1100px){
.node-grid.list .node-card{grid-template-columns:minmax(155px,1fr) minmax(145px,1fr) minmax(150px,1fr);grid-template-areas:"identity resources network" "routes resources facts" "tags bottom traffic" "latency latency latency";gap:6px 12px}
.node-grid.list .latency-panel{border-left:0;border-top:1px dashed var(--line);padding:6px 0 0;margin-top:2px}
.node-grid.list .latency-rows{grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}
.node-grid.list .latency-heading{margin-bottom:2px}.node-grid.list .latency-note{margin-top:3px}
}

.route-evidence-list{display:flex;flex-direction:column;gap:4px;min-width:0;max-width:100%}.route-evidence-list .route-item-label{font-size:14px;max-width:100%;white-space:normal}.route-evidence-list .route-item-label>span{white-space:normal;overflow-wrap:anywhere}.route-evidence-list small,.route-uncertain{font-size:14px;color:var(--muted)}.route-badge>.route-uncertain{white-space:normal}.route-badge>span:first-child{white-space:normal}

.route-attempts{margin-top:7px;font-size:14px}.route-attempts summary{cursor:pointer;color:var(--accent)}.route-attempts>div{padding:6px 0;border-top:1px dashed var(--line)}.route-attempts p{font-size:14px;overflow-wrap:anywhere;white-space:normal;margin:5px 0}
