-
+
-
- {{ isRecording ? 'TRANSMITTING' : 'Hold to transmit' }}
-
-
- {{ radioMode === 'atc' ? 'ATC' : 'INTERCOM' }}
-
-
- {{ radioMode === 'atc' ? `Transmitting on ${frequencies.active}` : 'Crew Intercom • Checklist' }}
+
+ {{ isRecording ? 'Auf Sendung' : 'Halten zum Senden' }}
+
{{ frequencies.active || '---' }}
+
Active frequency
@@ -309,7 +325,7 @@
Text Input
- {{ radioMode === 'atc' ? 'ATC' : 'Intercom' }}
+ {{ frequencies.active || '---' }}
('login')
const loading = ref(false)
const error = ref('')
const pilotInput = ref('')
-const radioMode = ref<'atc' | 'intercom'>('atc')
const isRecording = ref(false)
const micPermission = ref(false)
const swapAnimation = ref(false)
@@ -2782,6 +2797,18 @@ const onPresetSelectStandby = (opt: { value: string | number }) => {
if (entry) setStandbyFrequencyFromList(entry)
}
+// Readability / signal strength quick-select (top bar)
+const readabilityOptions = [
+ { value: 5, label: 'Excellent', sublabel: 'Readability 5', color: '#22c55e' },
+ { value: 4, label: 'Good', sublabel: 'Readability 4', color: '#22c55e' },
+ { value: 3, label: 'Fair', sublabel: 'Readability 3', color: '#eab308' },
+ { value: 2, label: 'Poor', sublabel: 'Readability 2', color: '#f97316' },
+ { value: 1, label: 'Weak', sublabel: 'Readability 1', color: '#ef4444' },
+]
+const onReadabilitySelect = (opt: { value: string | number }) => {
+ signalStrength.value = Number(opt.value)
+}
+
const formatTime = (date: Date): string => {
return date.toLocaleTimeString('en-US', {
hour12: false,
@@ -3236,6 +3263,60 @@ watch(() => activeFrequency.value, (newFreq) => {
transform: scale(0.97);
}
+/* Unified segmented control (voice / text, etc.) */
+.pm-seg {
+ display: flex;
+ gap: 4px;
+ padding: 4px;
+ border-radius: 16px;
+ border: 1px solid rgba(255, 255, 255, 0.1);
+ background: rgba(255, 255, 255, 0.04);
+}
+.pm-seg-btn {
+ flex: 1 1 0;
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ gap: 8px;
+ padding: 11px 12px;
+ border-radius: 12px;
+ font-size: 14px;
+ font-weight: 600;
+ letter-spacing: 0.02em;
+ color: rgba(255, 255, 255, 0.6);
+ transition: color 130ms ease, background 130ms ease;
+ -webkit-tap-highlight-color: transparent;
+}
+.pm-seg-btn:hover {
+ color: rgba(255, 255, 255, 0.85);
+}
+.pm-seg-btn.is-active {
+ color: #050910;
+ background: #22d3ee;
+}
+
+/* Readability / signal trigger in the top bar */
+.signal-chip {
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ padding: 8px 10px;
+ border-radius: 12px;
+ border: 1px solid rgba(255, 255, 255, 0.12);
+ background: rgba(255, 255, 255, 0.04);
+ transition: border-color 120ms ease, background 120ms ease, transform 80ms ease;
+}
+.signal-chip.is-open {
+ border-color: rgba(34, 211, 238, 0.7);
+ background: rgba(34, 211, 238, 0.14);
+ transform: scale(0.97);
+}
+.signal-chip .signal-bars {
+ display: inline-flex;
+ align-items: flex-end;
+ gap: 2px;
+}
+
/* Tablet / desktop: use the extra space ----------------------------------- */
@media (min-width: 1024px) {
.pm-sidenav {