/* Zielscan (/sensors/target-scan), Layout v2 — Lageleiste, Kontakte mit Suche/Filter, Abstimmung mit Drehreglern,
   Bericht als Kacheln; Umriss und Chiffre verdeckter Werte (scan-cipher.js). Signalfarben des Umrisses wie
   /defense/hull (hull.css). Desktop ab 1280 px fester Bildschirm (--tsc-h setzt target-scan-panel.js),
   Tablet 600–1279 px Kontakte als Leiste oben, Smartphone Reiter (data-tab am .tsc-console). Regler 3 × 2 mit
   ausgegrautem Leerplatz, Desktop neben dem Oszilloskop. */
.station-main:has(.tsc-console) { max-width: 100%; }
.tsc-console { --tsc-amber: #ffb347; --tsc-phosphor: #6ee7b7; --tsc-sus: #fb923c;
  display: flex; flex-direction: column; gap: 12px; min-width: 0; }
.tsc-label { color: var(--text-muted); font-size: var(--text-xs); text-transform: uppercase; letter-spacing: var(--tracking-label);
  display: flex; justify-content: space-between; gap: 8px; }
.tsc-label b { color: var(--text-primary); font-weight: 600; font-variant-numeric: tabular-nums; text-transform: none; letter-spacing: 0; }
.tsc-hint { color: var(--text-muted); font-size: var(--text-xs); }
.tsc-error { color: var(--accent-red); margin: 0; }
.tsc-amber { color: var(--tsc-amber); }
.tsc-amber b { font-weight: 600; }
.tsc-ico { width: 16px; height: 16px; flex: none; fill: none; stroke: var(--accent-red); stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; }
.tsc-ico--sm { width: 14px; height: 14px; stroke: currentColor; }
.tsc-ico--lg { width: 22px; height: 22px; stroke: var(--text-muted); }

/* ── Lageleiste ── */
.tsc-hud { background: var(--bg-panel); border: 1px solid var(--border-color); border-left: 3px solid var(--accent-red);
  border-radius: var(--radius-md); overflow: hidden; flex: none; transition: border-color .3s; }
.tsc-console.is-locked .tsc-hud { border-left-color: var(--tsc-phosphor); }
.tsc-hud__row { display: flex; flex-wrap: wrap; }
.tsc-hud__cell { padding: 14px 16px; min-width: 0; border-right: 1px solid var(--border-color); border-bottom: 1px solid var(--border-color); margin-bottom: -1px; }
.tsc-hud__target { flex: 1 1 260px; display: flex; gap: 14px; align-items: center; }
.tsc-hud__reticle { --iff: var(--text-muted); width: 52px; height: 52px; flex: none; border-radius: 50%; border: 1px solid var(--iff);
  display: grid; place-items: center; color: var(--iff); box-shadow: 0 0 10px color-mix(in srgb, var(--iff) 20%, transparent), inset 0 0 10px color-mix(in srgb, var(--iff) 20%, transparent); }
.tsc-hud__reticle svg { fill: none; stroke: currentColor; stroke-width: 1.6; stroke-linecap: round; }
.tsc-hud__who { min-width: 0; display: grid; gap: 3px; }
.tsc-hud__tags { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; }
.tsc-hud__iff { font-size: var(--text-xs); font-weight: 700; letter-spacing: var(--tracking-label); text-transform: uppercase; color: var(--iff, var(--text-muted)); }
.tsc-hud__sus { font-size: var(--text-xs); font-weight: 700; letter-spacing: var(--tracking-label); text-transform: uppercase; color: var(--tsc-sus);
  border: 1px solid var(--tsc-sus); padding: 0 5px; border-radius: 2px; }
.tsc-hud__name { font-size: var(--text-xl); font-weight: 700; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.tsc-hud__sub { font-size: var(--text-xs); color: var(--text-muted); letter-spacing: .04em; }
.tsc-hud__image { flex: 2 1 340px; display: grid; gap: 8px; }
.tsc-hud__head { display: flex; justify-content: space-between; align-items: baseline; gap: 8px; }
.tsc-hud__imgrow { display: flex; align-items: center; gap: 14px; }
.tsc-hud__pct { font-size: 2.2rem; font-weight: 700; color: var(--accent-cyan); text-shadow: 0 0 12px rgba(6, 182, 212, .5);
  font-variant-numeric: tabular-nums; min-width: 4.6ch; }
.tsc-console.is-locked .tsc-hud__pct { color: var(--tsc-phosphor); text-shadow: 0 0 12px rgba(16, 185, 129, .5); }
.tsc-hud__bar { flex: 1; min-width: 0; display: grid; gap: 4px; }
.tsc-segs { display: flex; gap: 2px; height: 16px; }
.tsc-segs > span, .tsc-lock__segs > span { flex: 1; border-radius: 1px; background: var(--bg-secondary); }
.tsc-segs > span.is-on { background: #22d3ee; box-shadow: 0 0 5px rgba(6, 182, 212, .7); }
.tsc-console.is-locked .tsc-segs > span.is-on { background: var(--tsc-phosphor); box-shadow: 0 0 5px #10b981; }
.tsc-ladder { position: relative; height: 14px; }
.tsc-ladder > span { position: absolute; top: 0; transform: translateX(-50%); font-size: 9px; letter-spacing: .06em; line-height: 14px;
  color: var(--text-muted); white-space: nowrap; border-left: 1px solid currentColor; padding-left: 3px; }
.tsc-ladder > span.is-reached { color: var(--tsc-phosphor); }
.tsc-hud__kpis { flex: 1 1 240px; display: grid; grid-template-columns: 1fr 1fr; gap: 10px 16px; align-content: center; border-right: 0; }
.tsc-kpi { --kpi: var(--text-primary); display: grid; gap: 3px; min-width: 0; }
.tsc-kpi .tsc-label { white-space: nowrap; }
.tsc-kpi__v { font-size: var(--text-md); font-weight: 600; color: var(--kpi); font-variant-numeric: tabular-nums; white-space: nowrap; }
.tsc-kpi__bar { display: block; height: 3px; background: var(--bg-secondary); border-radius: 2px; overflow: hidden; }
.tsc-kpi__bar > span { display: block; height: 100%; width: 0; background: var(--kpi); transition: width .25s linear; }
.tsc-kpi--good { --kpi: var(--accent-green); }
.tsc-kpi.is-bad { --kpi: var(--accent-red); }
.tsc-kpi--notice { --kpi: var(--accent-yellow); }
.tsc-kpi--notice.is-high { --kpi: var(--tsc-sus); }
.tsc-kpi--notice.is-bad { --kpi: var(--accent-red); }
.tsc-hud__msg { display: flex; gap: 10px; align-items: center; padding: 7px 16px; border-top: 1px solid var(--border-color);
  background: rgba(0, 0, 0, .18); font-size: var(--text-sm); }
.tsc-hud__msg > span:last-child { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.tsc-hud__msgkey { font-size: var(--text-xs); color: var(--accent-red); letter-spacing: var(--tracking-label); font-weight: 700; text-transform: uppercase; flex: none; }

/* ── Raster und Panels ── */
.tsc-grid { display: grid; gap: 12px; min-height: 0; align-items: start;
  grid-template-columns: minmax(0, 1fr); grid-template-areas: "contacts" "tune" "report"; }
.tsc-contacts { grid-area: contacts; }
.tsc-tuner { grid-area: tune; }
.tsc-report { grid-area: report; }
.tsc-panel { display: flex; flex-direction: column; min-width: 0; min-height: 0; background: var(--bg-panel);
  border: 1px solid var(--border-color); border-left: 3px solid var(--accent-red); border-radius: var(--radius-md); }
.tsc-panel__head { display: flex; align-items: center; justify-content: space-between; gap: 8px 12px; flex-wrap: wrap;
  padding: 8px 16px; border-bottom: 1px solid var(--border-color); }
.tsc-panel__title { display: flex; align-items: center; gap: 8px; margin: 0; font-size: var(--text-sm); font-weight: 600;
  text-transform: uppercase; letter-spacing: var(--tracking-label); }
.tsc-panel__actions { display: flex; gap: 8px; align-items: center; }
.tsc-panel__body { padding: 14px; display: grid; gap: 12px; align-content: start; min-height: 0; }
.tsc-report .tsc-panel__body { padding: 12px; gap: 10px; }
.tsc-panel__body, .tsc-clist { scrollbar-width: thin; scrollbar-color: #1f2d3d transparent; }

/* ── Kontakte ── */
.tsc-cfind { padding: 8px 10px 0; display: grid; gap: 8px; flex: none; }
.tsc-search { width: 100%; box-sizing: border-box; min-height: 36px; padding: 0 10px; font: inherit; font-size: var(--text-sm);
  color: var(--text-primary); background: #000510; border: 1px solid var(--border-color); border-radius: var(--radius-sm); outline: none; }
.tsc-search:focus { border-color: var(--accent-cyan); }
.tsc-filters { display: flex; gap: 4px; flex-wrap: wrap; }
.tsc-filter { display: flex; align-items: center; gap: 5px; min-height: 28px; padding: 0 8px; font: inherit; font-size: var(--text-xs);
  font-weight: 700; letter-spacing: .06em; border-radius: var(--radius-sm); border: 1px solid var(--border-color); background: transparent;
  color: var(--text-muted); cursor: pointer; }
.tsc-filter > i { width: 6px; height: 6px; border-radius: 50%; background: var(--dot, #6b7280); }
.tsc-filter > small { color: var(--text-muted); font-weight: 400; font-size: inherit; }
.tsc-filter[aria-pressed="true"] { border-color: var(--accent-cyan); background: var(--tint-cyan); color: var(--text-primary); }
.tsc-clist { padding: 10px; display: grid; gap: 6px; align-content: start; min-height: 0; }
.tsc-contact { --iff: #6b7280; display: grid; grid-template-columns: 4px minmax(0, 1fr) auto; gap: 10px; align-items: center;
  padding: 9px 12px 9px 0; min-height: 56px; border: 1px solid var(--border-color); background: var(--bg-secondary);
  border-radius: var(--radius-md); cursor: pointer; text-align: left; font: inherit; color: inherit; overflow: hidden;
  transition: border-color .15s, background .15s; }
.tsc-contact:hover { border-color: rgba(159, 194, 255, .35); }
.tsc-contact:focus-visible { outline: 2px solid var(--accent-cyan); outline-offset: 1px; }
.tsc-contact.is-selected { border-color: var(--accent-cyan); background: var(--tint-cyan);
  box-shadow: 0 0 0 1px rgba(6, 182, 212, .25), 0 0 12px rgba(6, 182, 212, .15); }
.tsc-contact.is-far { opacity: .5; }
.tsc-contact__iff { align-self: stretch; margin: -9px 0; background: var(--iff); }
.tsc-contact__main { min-width: 0; display: grid; gap: 4px; }
.tsc-contact__name { display: flex; gap: 6px; align-items: center; min-width: 0; font-weight: 600; }
.tsc-contact__name > span:first-child { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.tsc-contact__sus { flex: none; width: 6px; height: 6px; border-radius: 50%; background: var(--tsc-sus); box-shadow: 0 0 5px var(--tsc-sus); }
.tsc-contact__sub { font-size: var(--text-xs); color: var(--text-muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.tsc-contact__prog { display: block; height: 3px; border-radius: 1px; background: var(--border-color); overflow: hidden; }
.tsc-contact__prog > span { display: block; height: 100%; background: var(--tsc-phosphor); }
.tsc-contact.is-selected .tsc-contact__prog > span { background: #22d3ee; }
.tsc-contact__side { text-align: right; display: grid; gap: 2px; }
.tsc-contact__km { font-size: var(--text-md); font-weight: 600; font-variant-numeric: tabular-nums; white-space: nowrap; }
.tsc-contact__n { font-size: var(--text-xs); color: var(--text-muted); white-space: nowrap; }
.tsc-contact.is-far .tsc-contact__n { color: var(--accent-red); }
.iff-hostile { --iff: #f87171; --dot: #f87171; }
.iff-friendly { --iff: #4ade80; --dot: #4ade80; }
.iff-neutral { --iff: #60a5fa; --dot: #60a5fa; }
.iff-unknown { --iff: #facc15; --dot: #facc15; }
.tsc-cempty { padding: 16px 8px; text-align: center; font-size: var(--text-sm); color: var(--text-muted); }
.tsc-cmore { min-height: 44px; font: inherit; font-size: var(--text-xs); font-weight: 700; letter-spacing: var(--tracking-label);
  text-transform: uppercase; border: 1px dashed var(--border-color); background: transparent; color: var(--text-muted);
  border-radius: var(--radius-md); cursor: pointer; }
.tsc-cmore:hover { border-color: var(--accent-cyan); color: var(--accent-cyan); }

/* ── Abstimmung ── */
.tsc-tuner { position: relative; transition: border-color .3s; }
.tsc-tuner.is-locked { border-color: rgba(110, 231, 183, .6); border-left-color: var(--tsc-phosphor); }
.tsc-idle { display: flex; gap: 12px; align-items: flex-start; padding: 12px 14px; border: 1px dashed var(--border-color);
  border-radius: var(--radius-md); color: var(--text-muted); font-size: var(--text-sm); text-wrap: pretty; }
.tsc-idle[hidden] { display: none; }
.tsc-tune { display: grid; gap: 12px; transition: opacity .3s; }
.tsc-tune.is-idle { opacity: .4; filter: grayscale(1); }
.tsc-tune.is-idle .tsc-knob__dial, .tsc-tune.is-idle [data-step] { cursor: not-allowed; }
.tsc-fig { margin: 0; display: grid; gap: 6px; min-width: 0; }
.tsc-figcap { display: flex; justify-content: space-between; gap: 8px; font-size: var(--text-xs); color: var(--text-muted);
  text-transform: uppercase; letter-spacing: var(--tracking-label); }
.tsc-spec { position: relative; border: 1px solid var(--border-color); border-radius: var(--radius-md); background: #000510; overflow: hidden; }
.tsc-spectrum { display: block; width: 100%; height: var(--tsc-spec-h, 150px); }
.tsc-spectrum .axis line { stroke: rgba(255, 255, 255, .07); stroke-width: .15; }
.tsc-spectrum .window { fill: url(#tsc-spec-win); }
.tsc-spectrum .area { fill: url(#tsc-spec-fill); }
.tsc-spectrum .glow { fill: none; stroke: #22d3ee; stroke-opacity: .25; stroke-width: 5; vector-effect: non-scaling-stroke; }
.tsc-spectrum .trace { fill: none; stroke: #22d3ee; stroke-width: 1.5; vector-effect: non-scaling-stroke; }
.tsc-spectrum .tune { stroke: var(--tsc-amber); stroke-width: 2; vector-effect: non-scaling-stroke; }
.tsc-spec__ticks { position: absolute; left: 0; right: 0; bottom: 2px; display: flex; justify-content: space-between; padding: 0 6px;
  font-size: 9px; color: rgba(255, 255, 255, .35); pointer-events: none; }
.tsc-scoperow { display: grid; gap: 12px; grid-template-columns: minmax(0, 1fr); }
/* Oszilloskop (scan-scope.js): Phosphor auf fast schwarzem Grün — kräftig genug für Beamer und Tablet */
.tsc-scope canvas { width: 100%; height: var(--tsc-scope-h, 190px); display: block; background: rgb(3, 12, 9);
  border: 1px solid rgba(110, 231, 183, .25); border-radius: var(--radius-md); box-shadow: inset 0 0 24px rgba(16, 185, 129, .14); }
.tsc-scope__read { color: var(--tsc-phosphor); text-transform: none; letter-spacing: 0; white-space: nowrap; overflow: hidden;
  text-overflow: ellipsis; min-width: 0; max-width: 18ch; }
.tsc-legend { display: flex; flex-wrap: wrap; gap: 4px 14px; font-size: var(--text-xs); color: var(--text-muted); }
.tsc-legend > span { display: flex; align-items: center; gap: 6px; }
.tsc-dot { display: inline-block; width: 14px; height: 3px; border-radius: 2px; }
.tsc-dot--ours { background: #fbbf24; box-shadow: 0 0 4px #fbbf24; }
.tsc-dot--shield { background: var(--tsc-phosphor); box-shadow: 0 0 4px #10b981; }

/* Resonanz-Lock: Haltesegmente, Lampen der offen messbaren Bedingungen; eingerastet leuchtet der Rahmen */
.tsc-lock { align-self: start; padding: 12px; border: 1px solid var(--border-color); background: var(--bg-secondary);
  border-radius: var(--radius-md); display: grid; gap: 8px; transition: border-color .3s, background .3s; }
.tsc-lock__head { display: flex; justify-content: space-between; align-items: center; gap: 8px; }
.tsc-lock__title { display: flex; align-items: center; gap: 6px; font-size: var(--text-xs); font-weight: 700;
  letter-spacing: var(--tracking-label); text-transform: uppercase; color: var(--text-muted); }
.tsc-lock__segs { display: flex; gap: 3px; height: 10px; }
.tsc-lock__segs > span.is-on { background: var(--tsc-phosphor); box-shadow: 0 0 5px #10b981; }
.tsc-lock__text { font-size: var(--text-sm); color: var(--text-primary); }
.tsc-lock__conds { display: grid; grid-template-columns: repeat(4, 1fr); gap: 4px; }
.tsc-lock__conds > span { display: flex; align-items: center; justify-content: center; font-size: 9px; letter-spacing: .06em;
  text-transform: uppercase; padding: 3px 0; border-radius: 2px; border: 1px solid var(--text-dim); color: var(--text-dim); }
.tsc-lock__conds > span.is-ok { border-color: var(--tsc-phosphor); color: var(--tsc-phosphor); background: rgba(16, 185, 129, .12); }
/* Stufen des Locks: Knopf = einrasten/lösen; eingerastete grün */
.tsc-stages > button { font: inherit; font-size: 10px; font-weight: 700; letter-spacing: .04em; text-transform: uppercase; min-height: 28px;
  padding: 2px 4px; border-radius: 2px; border: 1px solid var(--text-dim); background: transparent; color: var(--text-dim); cursor: pointer; }
.tsc-stages > button.is-ok { border-color: var(--tsc-phosphor); color: var(--tsc-phosphor); background: rgba(16, 185, 129, .12); }
.tsc-stages > button:disabled { cursor: not-allowed; opacity: .55; }
/* Eingerastete Regler (gesperrt, grün) */
.tsc-knob.is-held { border-color: rgba(110, 231, 183, .5); }
.tsc-knob.is-held .tsc-knob__dial { cursor: not-allowed; }
.tsc-knob.is-held .tsc-knob__dial .arc, .tsc-knob.is-held .tsc-knob__dial .ptr { stroke: var(--tsc-phosphor); filter: drop-shadow(0 0 3px #10b981); }
.tsc-knob.is-held .tsc-knob__dial .ring.is-on { stroke: var(--tsc-phosphor); }
.tsc-knob.is-held .tsc-knob__dial .val { fill: #bbf7d0; }
.tsc-lock.is-locked { border-color: rgba(110, 231, 183, .6); background: rgba(16, 185, 129, .08); }
.tsc-lock.is-locked .tsc-lock__title, .tsc-lock.is-locked .tsc-lock__text { color: #bbf7d0; text-shadow: 0 0 6px #10b981; }
.tsc-sound { font: inherit; font-size: var(--text-xs); min-height: 28px; padding: 0 8px; border-radius: var(--radius-sm);
  border: 1px solid var(--border-color); background: transparent; color: var(--text-muted); cursor: pointer; }
.tsc-sound[aria-pressed="true"] { color: var(--text-secondary); }

/* Anzeigen Träger, Aussteuerung, Auflösung */
.tsc-meters { display: grid; gap: 10px 16px; grid-template-columns: minmax(0, 1fr); }
.tsc-meters > div { display: grid; gap: 4px; min-width: 0; }
.tsc-meter { position: relative; display: block; height: 8px; border-radius: 2px; background: var(--bg-secondary); border: 1px solid var(--border-color); }
.tsc-meter > span { display: block; height: 100%; width: 0; background: #10b981; border-radius: 1px; box-shadow: 0 0 6px #10b981; transition: width .25s linear; }
.tsc-meter > i { position: absolute; top: -3px; bottom: -3px; width: 2px; background: rgba(255, 255, 255, .55); }
.tsc-meter--drive.is-hot > span { background: var(--tsc-sus); box-shadow: 0 0 6px var(--tsc-sus); }
.tsc-meters .is-hot b { color: var(--tsc-sus); }

/* Drehregler (SVG aus target-scan-panel.js): Bernstein-Skala, Zeiger, Wert in der Mitte */
.tsc-knobs { display: grid; gap: 10px; grid-template-columns: repeat(2, minmax(0, 1fr)); }
.tsc-knob { padding: 10px 12px; border: 1px solid var(--border-color); background: var(--bg-secondary); border-radius: var(--radius-md);
  display: grid; gap: 6px; min-width: 0; justify-items: center; }
.tsc-knob__label { justify-self: stretch; display: flex; align-items: center; gap: 6px; font-size: var(--text-xs); color: var(--text-muted);
  text-transform: uppercase; letter-spacing: var(--tracking-label); white-space: nowrap; overflow: hidden; }
.tsc-keys { margin-left: auto; display: flex; gap: 2px; text-transform: none; }
.tsc-keys kbd { min-width: 14px; padding: 0 3px; font: inherit; font-size: 10px; line-height: 14px; text-align: center; color: var(--text-dim);
  border: 1px solid var(--border-color); border-radius: 3px; }
.tsc-lamp { flex: none; width: 6px; height: 6px; border-radius: 50%; background: var(--text-dim); }
.tsc-lamp.is-ok { background: var(--tsc-phosphor); box-shadow: 0 0 5px #10b981; }
.tsc-lamp.is-blank { background: transparent; }
.tsc-knob__dial { position: relative; width: min(var(--tsc-dial, 112px), 100%); aspect-ratio: 1; border-radius: 50%; cursor: grab; touch-action: none; outline: none; }
.tsc-knob__dial:focus-visible { box-shadow: 0 0 0 2px rgba(255, 179, 71, .55); }
.tsc-knob__dial.is-dragging { cursor: grabbing; }
.tsc-knob__dial svg { width: 100%; height: 100%; overflow: visible; display: block; }
.tsc-knob__dial .ring { stroke: #374151; stroke-width: 1.2; stroke-linecap: round; }
.tsc-knob__dial .ring.is-on { stroke: var(--tsc-amber); }
.tsc-knob__dial .arc-bg { fill: none; stroke: #1f2d3d; stroke-width: 4; stroke-linecap: round; }
.tsc-knob__dial .arc { fill: none; stroke: var(--tsc-amber); stroke-width: 4; stroke-linecap: round; filter: drop-shadow(0 0 3px #ffb347); }
.tsc-knob__dial .cap { fill: #111827; stroke: #1f2d3d; stroke-width: 1.5; }
.tsc-knob__dial .cap2 { fill: #0d1520; stroke: #1f2d3d; stroke-width: 1; }
.tsc-knob__dial .ptr { stroke: var(--tsc-amber); stroke-width: 3; stroke-linecap: round; filter: drop-shadow(0 0 3px #ffb347); }
.tsc-knob__dial .val { fill: var(--tsc-amber); font-size: 11px; font-weight: 700; font-family: var(--font-mono, monospace);
  text-anchor: middle; font-variant-numeric: tabular-nums; }
.tsc-fine { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 4px; }
.tsc-fine button { touch-action: none; user-select: none; -webkit-user-select: none; min-width: 42px; min-height: var(--tsc-fine-h, 32px);
  font: inherit; font-size: var(--text-xs); font-weight: 700; border: 1px solid var(--border-color); background: var(--bg-panel);
  color: var(--text-primary); border-radius: var(--radius-sm); cursor: pointer; }
.tsc-fine button:not(:disabled):hover { border-color: var(--tsc-amber); color: var(--tsc-amber); }
/* Leerplatz (6. Regler): ausgegraut, nur für die Symmetrie des Rasters */
.tsc-knob--spare { opacity: .35; border-style: dashed; pointer-events: none; }
.tsc-knob__spare { width: min(var(--tsc-dial, 112px), 100%); aspect-ratio: 1; border-radius: 50%; border: 2px dashed var(--text-dim);
  background: radial-gradient(circle, #0d1520 0 45%, transparent 46%); }
.tsc-knob--spare .tsc-fine { justify-self: stretch; }
.tsc-knob--spare .tsc-fine > span { min-height: var(--tsc-fine-h, 32px); border: 1px dashed var(--border-color); border-radius: var(--radius-sm); }

/* ── Bericht ── */
.tsc-outline { margin: 0; display: grid; gap: 6px; }
.tsc-fields { display: grid; gap: 8px; grid-template-columns: minmax(0, 1fr); align-items: start; grid-auto-flow: row dense; }
.tsc-fields > p { grid-column: 1 / -1; margin: 0; }
.tsc-section { border: 1px solid var(--border-color); background: var(--bg-secondary); border-radius: var(--radius-md);
  padding: 9px 11px; display: grid; gap: 6px; min-width: 0; transition: background .6s, border-color .6s; }
.tsc-section.is-live { border-color: rgba(16, 185, 129, .35); background: rgba(16, 185, 129, .05); }
.tsc-section--wide { grid-column: 1 / -1; }
/* Bauteile sind hoch: zwei Zeilen, daneben rücken die kleinen Kacheln (Munition, Lebenszeichen, Schildschwäche) nach (dense). */
.tsc-section--tall { grid-row: span 2; }
.tsc-section h3 { display: flex; justify-content: space-between; align-items: center; gap: 4px 8px; flex-wrap: wrap; min-width: 0; margin: 0;
  font-size: var(--text-xs); font-weight: 700; letter-spacing: var(--tracking-label); text-transform: uppercase; color: var(--text-muted); }
.tsc-section:not(.is-locked) h3 { color: var(--text-primary); }
.tsc-section__prog { display: block; height: 2px; background: var(--bg-panel); }
.tsc-section__prog > span { display: block; height: 100%; background: var(--tsc-phosphor); box-shadow: 0 0 4px #10b981; }
.tsc-kv { display: grid; grid-template-columns: max-content minmax(0, 1fr); gap: 2px 10px; font-size: var(--text-sm); margin: 0; }
.tsc-kv dt { color: var(--text-muted); white-space: nowrap; }
.tsc-kv dd { margin: 0; text-align: right; font-variant-numeric: tabular-nums; min-width: 0; overflow-wrap: anywhere; }
.tsc-good { color: var(--accent-green); }
.tsc-bad { color: var(--accent-red); }
.tsc-warn { color: var(--tsc-sus); }
.tsc-table { width: 100%; border-collapse: collapse; font-size: var(--text-xs); table-layout: fixed; }
/* In den Kacheln darf die Chiffre umbrechen: ihre feste Breite (scan-cipher.js) sprengt sonst schmale Kacheln. */
.tsc-section .tsc-cv { min-width: 0 !important; max-width: 100%; white-space: pre-wrap; overflow-wrap: anywhere; }
.tsc-table td { overflow-wrap: anywhere; }
.tsc-table td, .tsc-table th { padding: 2px 4px; text-align: left; }
.tsc-table th { color: var(--text-muted); font-weight: 500; }
.tsc-table tr.is-down td { color: var(--accent-red); text-decoration: line-through; }
.tsc-table tr.is-contraband td { color: var(--tsc-sus); font-weight: 600; }

/* Feldzustand: live, zuletzt gesehen, verschlüsselt */
.tsc-chip { font-size: 9px; letter-spacing: .04em; text-transform: none; font-weight: 400; padding: 1px 6px; border-radius: 2px;
  border: 1px solid currentColor; white-space: nowrap; color: var(--text-muted); }
.tsc-chip.is-live { color: #10b981; }
.tsc-chip.is-stale { color: #f59e0b; }
.tsc-section.is-stale dd, .tsc-section.is-stale td { opacity: .6; }

/* Chiffre: feste Breite je Feldart (scan-cipher.js setzt min-width), Zeichensalat gedämpft grün */
.tsc-cv { display: inline-block; font-family: var(--font-mono, monospace); white-space: pre; text-align: right; }
.tsc-cv.is-cipher { color: rgba(74, 222, 128, 0.55); letter-spacing: 0.04em; }
td .tsc-cv { text-align: left; }
svg .tsc-cv.is-cipher { fill: rgba(74, 222, 128, 0.6); }

/* Umriss: Draufsicht und Seitenansicht wie /defense/hull — Fläche in Signalfarbe, Bauteile als Punkte */
.tsc-outline[hidden] { display: none; }
.tsc-ol-views { display: grid; gap: 6px; grid-template-columns: repeat(auto-fit, minmax(min(100%, 240px), 1fr)); }
.tsc-ol-svg { width: 100%; height: auto; display: block; background: #0d1520; border: 1px solid #1f2d3d; border-radius: 6px; }
.tsc-ol-meta text { fill: #6b7280; font-family: var(--font-mono, monospace); font-size: 11px; letter-spacing: 0.15em; }
.tsc-ol-hull { stroke: none; }
.tsc-ol-hull.is-unknown { fill: rgba(159, 194, 255, 0.05); stroke: rgba(159, 194, 255, 0.35); stroke-width: 1.5; stroke-dasharray: 6 5; }
.tsc-ol-edge { fill: none; stroke: #9fc2ff; stroke-opacity: 0.55; stroke-width: 1.5; }
.tsc-ol-hull.hs-ok   { fill: rgba(16, 185, 129, 0.16); }
.tsc-ol-hull.hs-warn { fill: rgba(245, 158, 11, 0.18); }
.tsc-ol-hull.hs-dmg  { fill: rgba(249, 115, 22, 0.22); }
.tsc-ol-hull.hs-crit { fill: rgba(239, 68, 68, 0.28); }
.tsc-ol-edge.hs-e-ok { stroke: #10b981; stroke-opacity: 1; }
.tsc-ol-edge.hs-e-warn { stroke: #f59e0b; stroke-opacity: 1; }
.tsc-ol-edge.hs-e-dmg { stroke: #f97316; stroke-opacity: 1; }
.tsc-ol-edge.hs-e-crit { stroke: #ef4444; stroke-opacity: 1; }
.tsc-ol-shield { fill: none; stroke-width: 2; stroke-dasharray: 10 6; }
.tsc-ol-shield.is-unknown { stroke: rgba(159, 194, 255, 0.25); }
.tsc-ol-shield.is-none { display: none; }
.tsc-ol-shield.is-down { stroke: rgba(239, 68, 68, 0.35); stroke-dasharray: 2 8; }
.tsc-ol-shield.hs-ok { stroke: #60a5fa; }
.tsc-ol-shield.hs-warn { stroke: #f59e0b; }
.tsc-ol-shield.hs-dmg { stroke: #f97316; }
.tsc-ol-shield.hs-crit { stroke: #ef4444; }
.tsc-ol-mod circle { fill: #4b5563; stroke: #0d1520; stroke-width: 1.5; }
.tsc-ol-mod.is-unknown circle { fill: none; stroke: rgba(159, 194, 255, 0.5); stroke-dasharray: 2 2; }
.tsc-ol-mod.ht-m-ok circle { fill: #10b981; }
.tsc-ol-mod.ht-m-warn circle { fill: #f59e0b; }
.tsc-ol-mod.ht-m-dmg circle { fill: #f97316; }
.tsc-ol-mod.ht-m-crit circle { fill: #ef4444; }
.tsc-ol-mod.is-destroyed circle { fill: #7f1d1d; }
.tsc-ol-pct { font-family: var(--font-mono, monospace); font-size: 11px; text-anchor: middle; fill: #cbd5e1; }
.tsc-ol-pct.is-hidden { display: none; }
.tsc-ol-big { font-family: var(--font-mono, monospace); font-size: 28px; font-weight: bold; text-anchor: middle; fill: #cbd5e1; }
.tsc-ol-shieldpct { font-family: var(--font-mono, monospace); font-size: 13px; fill: #9fc2ff; }
.tsc-ol-big.hs-t-ok, .tsc-ol-shieldpct.hs-t-ok, .tsc-kv dd.hs-t-ok { fill: #10b981; color: #10b981; }
.tsc-ol-big.hs-t-warn, .tsc-ol-shieldpct.hs-t-warn, .tsc-kv dd.hs-t-warn { fill: #f59e0b; color: #f59e0b; }
.tsc-ol-big.hs-t-dmg, .tsc-ol-shieldpct.hs-t-dmg, .tsc-kv dd.hs-t-dmg { fill: #f97316; color: #f97316; }
.tsc-ol-big.hs-t-crit, .tsc-ol-shieldpct.hs-t-crit, .tsc-kv dd.hs-t-crit { fill: #ef4444; color: #ef4444; }
.tsc-ol-note { margin: 4px 0; }
.tsc-ol-list { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(auto-fill, minmax(11rem, 1fr)); gap: 2px 12px; font-size: 0.78rem; }
.tsc-ol-item { display: flex; justify-content: space-between; gap: 6px; border-bottom: 1px solid rgba(159,194,255,0.08); }
.tsc-ol-item.is-ok .tsc-cv { color: #10b981; }
.tsc-ol-item.is-warn .tsc-cv { color: #f59e0b; }
.tsc-ol-item.is-dmg .tsc-cv { color: #f97316; }
.tsc-ol-item.is-crit .tsc-cv, .tsc-ol-item.is-dead .tsc-cv { color: #ef4444; }
.tsc-ol-name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

/* Leuchtrahmen über ein Pseudo-Element: nur opacity animiert (kein Layout, kein Neuzeichnen des Inhalts) */
.tsc-tuner::after { content: ""; position: absolute; inset: -1px; border-radius: inherit; pointer-events: none; opacity: 0;
  border: 1px solid #6ee7b7; box-shadow: 0 0 14px rgba(16, 185, 129, 0.55), inset 0 0 10px rgba(16, 185, 129, 0.25); transition: opacity 0.3s; }
.tsc-tuner.is-locked::after { opacity: 1; animation: tsc-lock-pulse 2.4s ease-in-out infinite; }
.tsc-tuner.is-flash::after { opacity: 1; animation: tsc-lock-flash 0.7s ease-out 1; box-shadow: 0 0 28px rgba(209, 250, 229, 0.9), inset 0 0 18px rgba(209, 250, 229, 0.5); }
.tsc-tuner.is-lost::after { opacity: 1; border-color: var(--accent-red, #ef4444); box-shadow: 0 0 16px rgba(239, 68, 68, 0.6); animation: tsc-lock-tear 0.9s steps(6, end) 1; }
@keyframes tsc-lock-pulse { 0%, 100% { opacity: 0.55; } 50% { opacity: 1; } }
@keyframes tsc-lock-flash { 0% { opacity: 1; } 100% { opacity: 0.6; } }
@keyframes tsc-lock-tear { 0% { opacity: 1; clip-path: inset(0 0 60% 0); } 33% { clip-path: inset(40% 0 0 0); } 66% { opacity: 0.6; clip-path: inset(0 30% 30% 0); } 100% { opacity: 0; clip-path: inset(0); } }

/* Umriss: Scanlinie, Schwachstelle am Schildring, Bauteile blitzen beim Entschlüsseln */
.tsc-ol-sweep { pointer-events: none; mix-blend-mode: screen; }
.tsc-ol-weak { fill: none; stroke: none; }
.tsc-ol-weak[d^="M"] { stroke: var(--accent-red, #ef4444); stroke-width: 5; stroke-linecap: round; opacity: 0.55; }
.tsc-ol-weak.is-live { opacity: 1; animation: tsc-weak 1.6s ease-in-out infinite; }
@keyframes tsc-weak { 0%, 100% { stroke-width: 4; } 50% { stroke-width: 7; } }
.tsc-ol-mod.is-fresh circle { animation: tsc-mod-flash 1.2s ease-out 1 both; }
@keyframes tsc-mod-flash { 0% { fill: #ecfdf5; stroke: #6ee7b7; stroke-width: 6; } 100% { stroke-width: 1.5; } }
.tsc-section.is-fresh { animation: tsc-sec-flash 1.2s ease-out 1 both; }
@keyframes tsc-sec-flash { 0% { box-shadow: 0 0 0 1px rgba(110, 231, 183, 0.8), inset 0 0 24px rgba(110, 231, 183, 0.35); } 100% { box-shadow: none; } }
.tsc-section--lock h3 > span:first-child::before { content: "◆ "; color: var(--tsc-phosphor); }
.tsc-weak { color: var(--accent-red, #ef4444); font-weight: 600; }

@media (prefers-reduced-motion: reduce) {
  .tsc-meter > span { transition: none; }
  .tsc-tuner::after { transition: none; }
  .tsc-tuner.is-locked::after, .tsc-tuner.is-flash::after, .tsc-tuner.is-lost::after,
  .tsc-ol-weak.is-live, .tsc-ol-mod.is-fresh circle, .tsc-section.is-fresh { animation: none; }
  .tsc-tuner.is-lost::after { opacity: 0; }
}

/* ── Smartphone (unter 600 px): Reiter, eine Spalte, große Feinknöpfe ── */
.tsc-tabs { display: none; }
@media (max-width: 599px) {
  .tsc-keys { display: none; }
  .tsc-console { --tsc-spec-h: 110px; --tsc-scope-h: 150px; --tsc-fine-h: 44px; }
  .tsc-tabs { position: sticky; top: var(--alert-bar-h, 0px); z-index: 5; display: grid; grid-template-columns: repeat(3, 1fr); gap: 4px;
    padding: 4px; background: var(--bg-secondary); border: 1px solid var(--border-color); border-radius: var(--radius-md); }
  .tsc-tabs button { min-height: 44px; border: 1px solid transparent; background: transparent; color: var(--text-muted);
    border-radius: var(--radius-sm); font: inherit; font-size: var(--text-xs); font-weight: 700; letter-spacing: var(--tracking-label);
    text-transform: uppercase; cursor: pointer; display: grid; gap: 1px; place-items: center; }
  .tsc-tabs button small { font-size: 9px; font-weight: 400; color: var(--text-muted); letter-spacing: .04em; }
  .tsc-tabs button[aria-selected="true"] { border-color: var(--accent-red); background: var(--tint-red); color: var(--text-primary); }
  .tsc-console[data-tab="contacts"] [data-pane]:not([data-pane="contacts"]),
  .tsc-console[data-tab="tune"] [data-pane]:not([data-pane="tune"]),
  .tsc-console[data-tab="report"] [data-pane]:not([data-pane="report"]) { display: none; }
  .tsc-hud__cell { border-right: 0; }
  .tsc-clist { max-height: 520px; overflow-y: auto; }
  .tsc-ol-pct { display: none; }
}

/* ── Tablet (600–1279 px): Kontakte als Leiste oben (rollt seitlich), darunter Abstimmung und Bericht ── */
@media (min-width: 600px) and (max-width: 1279px) {
  .tsc-console { --tsc-spec-h: 150px; --tsc-scope-h: 190px; }
  .tsc-clist { grid-auto-flow: column; grid-template-rows: repeat(2, auto); grid-auto-columns: minmax(230px, 1fr); overflow-x: auto; }
  .tsc-scoperow { grid-template-columns: minmax(0, 1.4fr) minmax(220px, 1fr); }
  .tsc-fields { grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); }
}
@media (min-width: 600px) {
  .tsc-meters { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  /* Fünf Regler + Leerplatz: 3 × 2 */
  .tsc-knobs { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}
@media (min-width: 900px) and (max-width: 1279px) {
  .tsc-grid { grid-template-columns: minmax(0, 1.3fr) minmax(0, 1fr); grid-template-areas: "contacts contacts" "tune report"; }
  .tsc-scoperow { grid-template-columns: minmax(0, 1fr); }
}

/* ── Desktop ab 1280 px: fester Bildschirm, die Spalten rollen in sich ── */
@media (min-width: 1280px) {
  .tsc-console { --tsc-spec-h: 88px; --tsc-scope-h: 132px; height: var(--tsc-h, auto); min-height: 640px; }
  /* --tsc-h zieht nur 16 px Rand ab, .station-main hat unten 24 px Innenabstand: sonst scrollt die Seite um 8 px. */
  .tsc-console[style*="--tsc-h"] { height: calc(var(--tsc-h) - 8px); }
  .tsc-grid { flex: 1 1 auto; grid-template-columns: 280px minmax(0, 1fr) minmax(0, 1fr); grid-template-areas: "contacts tune report";
    grid-template-rows: minmax(0, 1fr); align-items: stretch; }
  .tsc-panel { max-height: 100%; }
  .tsc-panel__body { overflow-y: auto; }
  /* Bericht ohne Rollen: target-scan-panel.js (fitReport) verkleinert den Inhalt, bis er passt (höchstens auf 72 %). */
  .tsc-report .tsc-panel__body > * { zoom: var(--tsc-rep-zoom, 1); }
  .tsc-clist { overflow-y: auto; flex: 1 1 auto; }
  .tsc-fields { grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); }
  /* Abstimmung: Spektrum oben, links Oszilloskop + Lock + Anzeigen, rechts die Regler 3 × 2 — kein Rollen */
  .tsc-grid { grid-template-columns: 250px minmax(0, 1.5fr) minmax(0, 1fr); }
  .tsc-tune { --tsc-dial: 76px; --tsc-fine-h: 26px; grid-template-columns: minmax(200px, 1fr) minmax(330px, 1fr);
    grid-template-areas: "spec spec" "scope knobs" "lock knobs" "meters meters"; grid-template-rows: auto auto 1fr auto; align-items: start; }
  .tsc-tune > .tsc-fig { grid-area: spec; }
  .tsc-scoperow { display: contents; }
  .tsc-scope { grid-area: scope; }
  .tsc-lock { grid-area: lock; align-self: stretch; padding: 10px; gap: 6px; }
  .tsc-meters { grid-area: meters; }
  .tsc-knobs { grid-area: knobs; gap: 8px; }
  .tsc-knob { padding: 8px; gap: 5px; }
  .tsc-knob__label { letter-spacing: .04em; }
  .tsc-fine { justify-self: stretch; }
  .tsc-fine button { min-width: 0; padding: 0 2px; }
}
/* Breite Bildschirme: Feinknöpfe in einer Zeile, größere Regler */
@media (min-width: 1600px) {
  .tsc-tune { --tsc-dial: 88px; }
  .tsc-fine { grid-auto-flow: column; grid-auto-columns: minmax(0, 1fr); grid-template-columns: none; }
}
/* Niedrige Bildschirme (Laptop): kleinere Anzeigen, damit die Abstimmung ohne Rollen passt */
@media (min-width: 1280px) and (max-height: 860px) {
  .tsc-console { --tsc-spec-h: 64px; --tsc-scope-h: 96px; }
  .tsc-tune { --tsc-dial: 62px; gap: 10px; }
}
/* Hohe Bildschirme: den Platz für Spektrum, Oszilloskop und Regler nutzen */
@media (min-width: 1280px) and (min-height: 1060px) {
  .tsc-console { --tsc-spec-h: 120px; --tsc-scope-h: 180px; }
  .tsc-tune { --tsc-dial: 100px; }
}
