Menghubungkan ke Robot...
{/* Stream Kamera */}
{ e.currentTarget.style.display = 'none'; }} />
{/* Indikator Status Perekaman */}
{(isRecordingRef.current || isPlayingRef.current) && (
{/* OVERLAY: FULLSCREEN */}
{/* OVERLAY: BOTTOM LEFT (MOVEMENT CONTROLS) */}
{/* FOOTER TEXT */}
{isRecordingRef.current && MEREKAM}
{isPlayingRef.current && MEMUTAR RUTE}
)}
{/* OVERLAY: TOP BAR */}
{controlMode === 'pc-mobile' ? (
) : (
)}
{/* OVERLAY: BOTTOM RIGHT (ACTION CONTROLS) */}
0.1 ? 'bg-white text-slate-900 border-white' : 'bg-white/20 text-white border-white/50 backdrop-blur-sm'}`}>LT
0.1 ? 'bg-white text-slate-900 border-white' : 'bg-white/20 text-white border-white/50 backdrop-blur-sm'}`}>RT
←
→
{[
{ action: 'RECORD', pc: 'V', gp: 'B', color: 'bg-red-500 shadow-[0_4px_0_#b91c1c]', activeColor: 'active:bg-red-600', gpState: gpVisuals.btnB },
{ action: 'SAVE', pc: 'B', gp: 'Y', color: 'bg-amber-400 shadow-[0_4px_0_#d97706]', activeColor: 'active:bg-amber-500', gpState: gpVisuals.btnY },
{ action: 'PLAY_FWD', pc: 'N', gp: 'A', color: 'bg-emerald-500 shadow-[0_4px_0_#047857]', activeColor: 'active:bg-emerald-600', gpState: gpVisuals.btnA },
{ action: 'PLAY_REV', pc: 'M', gp: 'X', color: 'bg-blue-600 shadow-[0_4px_0_#1d4ed8]', activeColor: 'active:bg-blue-700', gpState: gpVisuals.btnX }
].map((btn) => (
{btn.action === 'PLAY_FWD' ? 'PLAY' : btn.action === 'PLAY_REV' ? 'R-PLAY' : btn.action}
))}