/* ADS-B 피더 대시보드 — 목록 + 상세 배치 (feeder-list.js · v1 2026-10-01)
   ⚠ 색은 호스트 토큰(theme.css)만 쓴다 — feeders.html은 admin-shell.css를 싣지 않으므로 모든 var()에 대체값을 둔다. */

/* 2열 — 목록을 넓게. ⚠ 1000px 이하에서는 admin-feeders.js의 .afd-cols 규칙대로 1열이 된다 */
.afd-cols.afl-cols{grid-template-columns:minmax(0,1.45fr) minmax(0,1fr)}
@media (max-width:1000px){.afd-cols.afl-cols{grid-template-columns:minmax(0,1fr)}}

/* 거르기 줄 */
.afl-bar{display:flex;gap:8px;align-items:center;flex-wrap:wrap;padding:8px 11px;
  border-bottom:1px solid var(--border-subtle,#e2e8f0)}
.afl-chips{display:flex;gap:4px;flex-wrap:wrap}
.afd .afl-chip{padding:2px 9px;border-radius:999px;font-size:11.5px;display:inline-flex;align-items:center;gap:5px}
.afd .afl-chip.on{background:var(--text-primary,#0f172a);border-color:transparent;color:var(--bg-surface-elevated,#fff);font-weight:700}
.afl-n{font-variant-numeric:tabular-nums;opacity:.7}
.afl-dot{display:inline-block;width:7px;height:7px;border-radius:50%;background:var(--text-tertiary,#64748b)}
.afl-dot.ok{background:var(--ahm-ok,#15803d)} .afl-dot.warn{background:var(--ahm-warn,#b45309)}
.afl-dot.err{background:var(--ahm-err,#b91c1c)} .afl-dot.hold,.afl-dot.unknown{background:var(--ah-unknown,#7c3aed)}
.afl-q{margin-left:auto;width:220px;max-width:100%;padding:5px 9px;font:inherit;font-size:12.5px;box-sizing:border-box;
  border:1px solid var(--border-medium,#cbd5e1);border-radius:8px;background:var(--bg-surface-elevated,#fff);color:inherit}
@media (max-width:640px){.afl-q{margin-left:0;width:100%}}

/* 표 — 한 줄 한 피더 */
.afl-body{padding:0}
.afl-tb{width:100%;border-collapse:collapse;font-size:12.5px}
.afl-tb th,.afl-tb td{padding:6px 9px;text-align:left;white-space:nowrap;vertical-align:middle;
  border-bottom:1px solid var(--border-subtle,#e2e8f0)}
.afl-tb th{position:sticky;top:0;z-index:1;font-size:11px;font-weight:600;color:var(--text-secondary,#475569);
  background:var(--bg-sunken,#f6f8fa)}
.afl-tb th.n,.afl-tb td.n{text-align:right;font-variant-numeric:tabular-nums}
.afd .afl-sort{border:0;background:none;padding:0;font:inherit;font-weight:600;color:inherit;border-radius:4px}
.afd .afl-sort:hover{background:none;color:var(--text-primary,#0f172a)}
.afl-tb tbody tr{cursor:pointer}
.afl-tb tbody tr:hover{background:var(--bg-hover,#f1f5f9)}
.afl-tb tbody tr.on{background:var(--adm-sel,rgba(79,70,229,.09))}
.afl-tb tbody tr.on td:first-child{box-shadow:inset 3px 0 0 var(--accent-indigo,#4f46e5)}
.afl-tb tbody tr:focus-visible{outline:2px solid var(--accent-indigo,#4f46e5);outline-offset:-2px}
.afl-tb .afd-nm{line-height:1.3}
.afl-own{max-width:170px;overflow:hidden;text-overflow:ellipsis}
.afl-own .afd-id{overflow:hidden;text-overflow:ellipsis}
.afl-sp svg{display:block;width:80px;height:18px}
.afl-stale{color:var(--ah-warn,#b45309);font-weight:600}
.afl-tags{display:flex;gap:3px;flex-wrap:wrap;max-width:190px}
.afl-tag{font-size:10.5px;line-height:1.5;padding:0 5px;border-radius:4px;white-space:nowrap;
  border:1px solid var(--border-subtle,#e2e8f0);color:var(--text-secondary,#475569)}
.afl-tag.ok{color:var(--ah-ok,#15803d);border-color:currentColor}
.afl-tag.warn{color:var(--ah-warn,#b45309);border-color:currentColor;font-weight:700}
.afl-tag.err{color:var(--ah-err,#b91c1c);border-color:currentColor;font-weight:700}
.afl-tag.hold{color:var(--ah-unknown,#7c3aed);border-color:currentColor;font-weight:700}
/* 설치 대기(2026-10-24) — 승인 전·자료 한 번도 없음. 점선 테두리로 «아직 없는 것»을 말한다 */
.afl-tag.pending{border-style:dashed;color:var(--text-tertiary,#64748b)}
.afl-dot.pending{background:transparent;border:1px dashed var(--text-tertiary,#64748b);box-sizing:border-box}
.afl-note.pending{border-left-color:var(--text-tertiary,#64748b)}

/* 상세 칸 */
.afl-dh{gap:8px}
.afl-dn{font-size:14px !important;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.afd .afl-x{margin-left:auto;border:0;background:none;padding:0 6px;font-size:18px;line-height:1;color:var(--text-tertiary,#64748b)}
.afl-dt{display:flex;flex-direction:column;gap:8px}
.afl-dt h5{margin:4px 0 0;font-size:11px;font-weight:600;color:var(--text-tertiary,#64748b);letter-spacing:.02em}
.afl-meta{font-size:11.5px;color:var(--text-secondary,#475569);word-break:break-all}
.afl-notes{display:flex;flex-direction:column;gap:4px}
.afl-note{font-size:12px;padding:6px 9px;border-radius:7px;background:var(--bg-sunken,#f6f8fa);
  border-left:3px solid var(--ah-warn,#b45309)}
.afl-note.err{border-left-color:var(--ah-err,#b91c1c)}
.afl-note.hold{border-left-color:var(--ah-unknown,#7c3aed)}
.afl-stats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px}
.afl-stats i{display:block;font-style:normal;font-size:11px;color:var(--text-tertiary,#64748b)}
.afl-stats b{display:block;font-size:15px;font-variant-numeric:tabular-nums;white-space:nowrap}
@media (max-width:640px){.afl-stats{grid-template-columns:repeat(2,minmax(0,1fr))}}
.afd-spark.afl-big svg{height:52px}
.afd-spark.afl-big .afd-wait{height:52px}
.afl-sws{display:flex;flex-direction:column;gap:7px}
.afl-sw{display:flex;align-items:center;justify-content:space-between;gap:10px;font-size:12.5px}
.afl-sw small{display:block;font-size:11px;color:var(--text-tertiary,#64748b)}
.afd .afl-tg{position:relative;flex:none;width:36px;height:20px;padding:0;border:0;border-radius:999px;
  background:var(--border-medium,#cbd5e1)}
.afd .afl-tg:hover{background:var(--border-medium,#cbd5e1);filter:brightness(.95)}
.afd .afl-tg::after{content:"";position:absolute;top:2px;left:2px;width:16px;height:16px;border-radius:50%;
  background:#fff;box-shadow:0 1px 2px rgba(0,0,0,.25);transition:left .15s}
.afd .afl-tg[aria-checked="true"]{background:var(--accent-indigo,#4f46e5)}
.afd .afl-tg[aria-checked="true"]::after{left:18px}
.afl-tracks{border:1px solid var(--border-subtle,#e2e8f0);border-radius:8px;max-height:260px;overflow:auto}
.afl-tracks .afd-empty{padding:10px}
.afl-tracks .afd-note{margin:6px 8px}
.afd .afl-danger button{color:var(--ah-err,#b91c1c)}
.afl-hint{margin:0 0 6px}
@media (prefers-reduced-motion:reduce){.afd .afl-tg::after{transition:none}}
